Go路径(GOPATH)的作用是什么?

$ 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          (安装的包对象,即静态库文件)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注