$ go help gopath
Go路径用来解析import语句导入的包路径。它由go/build包实现并给出文档。
GOPATH环境变量指导Go项目代码在何处查找要导入的包。在Unix系统里,GOPATH环境变量的值是冒号’:’分隔的路径字符串。在Windows系统里,该值是分号’;’分隔的路径字符串。在Plan 9系统里,该值是一个字符串列表。
GOPATH环境变量的默认值是用户家目录下名为”go”的文件夹的绝对路径(在Unix系统里是$HOME/go,在Windows系统里是%USERPROFILE%\go)。执行go env GOPATH命令查看GOPATH环境变量的当前值。
查看https://golang.org/wiki/SettingGOPATH文档,如何设置一个自定义的GOPATH值。
每个列在GOPATH变量里的目录,必须有一个预定义的结构:
- src目录保存源代码。src目录里的子目录的路径决定了import导入的包的路径,src目录里的main包文件的名字决定了可执行文件的名字。
- pkg目录保存了下载的包文件、编译后的静态库文件等。其中,每个操作系统和CPU架构对对应一个子目录(pkg/GOOS_GOARCH)。
- 如果有某个目录DIR,它的路径列在GOPATH环境变量里,某个包的源代码放在DIR/src/foo/bar目录里,那么它就可以通过import “foo/bar”语句被其他Go代码文件导入,并且它编译后的静态库文件放在DIR/pkg/GOOS_GOARCH/foo/目录里,即DIR/pkg/GOOS_GOARCH/foo/bar.a。
- bin目录保存了编译后的命令。每个命令的名字都以其源代码文件所在的目录的名字命名,而不是以整个包路径为名。也就是说,源代码在DIR/src/foo/quux/的命令安装在DIR/bin/quux/中,而不是DIR/bin/foo/quux/中。去掉了“foo/”前缀,这样你就可以将DIR/bin添加到PATH中,以访问已安装的命令。如果设置了GOBIN环境变量,则命令将安装到其值给出的目录中,而不是DIR/bin。GOBIN的值必须是绝对路径。
以下是一个列在GOPATH变量里的目录的布局实例:
GOPATH=/home/user/go
/home/user/go/
src/
foo/
bar/ (在bar包中的Go源代码)
x.go
quux/ (在main包中的Go源代码)
y.go
bin/
quux (安装的命令)
pkg/
linux_amd64/
foo/
bar.a (安装的包对象,即静态库文件)
