包
自定义包
对于一个较大的应用程序,我们应该将它的功能性分隔成逻辑的单元,分别在不同的包里实现,我们创建的自定义包最好放在GOPATH的src目录下,或者GOPATH的src的某个子目录。
在Go语言中,代码包中的源码文件名可以是任意的,但是,这些任意名称的源码文件必须以包声明语句作为文件中的第一行,每个包都对应一个独立的名字空间。
package calc
包中成员以名称首字母决定访问权限:
- public:首字母大写,可以被包外访问
- private:首字母小写,仅包内成员可以访问
注意:同一个目录下不能定义不同的package。
main包
导入包
传统写法:
import "fmt" // 导入包,必须使用,否则编译不过
import "os"
常用写法:
import {
"fmt"
"os"
}
. 操作 调用函数无需包名
import . "fmt"
func main() {
Println("os.Args = " , Args)
}
给包名起别名
import io "fmt"
忽略此包
import _ "fmt"
下划线操作常常是用于引入该包,但不直接使用包里面的函数,只是为了调用包的init函数。
main函数和init函数
go有两个保留函数,init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值,虽然一个package里面可以写任意多个init函数,但这无论是可读性还是可维护性来说,强烈建议一个package中每个文件只写一个init函数。
所有的 init都会在程序执行开始的时候被调用,都会在main函数之前执行。
程序的初始化和执行都起始于main包,如果main包还导入了其他的包,那么就会在编译时将他们依次导入。需要注意的是,先执行被导入包的init函数,最后执行main的init函数。
工程管理
同目录
- 分文件编程(多个源文件),必须放在src目录
- 设置GOPATH环境变量
- 同一个目录,包名必须一样
- go env 查看go相关的环境路径
- 同一个目录调用别的文件的函数,直接调用即可,无需包名引用
不同目录
- 不同目录,包名不一样
- 调用不同包里面的函数,格式:包名.函数名()
包中成员以名称首字母决定访问权限:
- public:首字母大写,可以被包外访问
- private:首字母小写,仅包内成员可以访问
- private无法被别的包调用
go install
- src目录放源代码;bin目录放可执行程序;pkg放平台相关库
- 如果源码有多个文件或多个包,需要先配置GOPATH环境变量,配置src同级目录的绝对路径
- 环境变量GOBIN:指定源代码路径的bin目录
- 配置环境变量GOBIN后,使用go install命令,会自动生成bin和pkg