Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了GOPATH 深度解析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本篇博客来自于
Go语言介绍
golang官方1
golang官方2

GOPATH 是golang 中的一个环境变量,了解它对了解整个golang项目的组织方式很有帮助,同时很多go 命令也会认用到 GOPATH,所以必须牢固掌握。

原文如下:

介绍:

GOPATH 环境变量是用来指定GOROOT之外的,包含项目的源文件和他们的二进制文件的目录。
也就是说:你的项目的源代码文件(.go文件) 和 二进制文件(:package 和 可执行文件) 都会放在GOPATH下面。 因为整个工程斗放在$GOPATH下面,所以 go 工具(比如 go install) 将会对GOPATH 下面的内容进行查找。比如 二进制的目的地,搜索 imports 的地址。

GOPATH 是一个 路径列表,指定的多个目录由 “:” 分隔,(OS X 或者LinuX)或者 “;”分隔(Windows上面)。

当多个目录列出的时候, go install 或者 “go 工具” 以外的任何地方使用,第一个目录作为安装目录。 当在GOPATH的路径列表内使用这两种工具的时候,包含目录作为安装目录。(这个在下文中的例子中会存在)

对于本文档的大部分内容, $GOPATH 表示 指向路径列表中当前活动的第一个

设置GOROOT(使用全局设置,在/etc/..中)

使其生效

编辑当前用户的环境变量

设置 GOPOAH

是其生效

此处设置了 GOPATH 为两个目录(一个用于存放第三方包,一个用户开发),如果使用 go 工具 进行第三方包的安装
go get code.google.com/p/go-tour/gotour
认会安装到第一个目录 ($HOME/p/ext)

如果在$HOME/p/dev 中写代码,使用 go工具(go install,go build) 会将二进制包安装到 $HOME/p/dev中。

集成 GOPATH

在 OS X 或者 Linux中,加入下面的表达式到 PATH中,将会加入所有的 $GOPATH/bin 目录。

@L_673_26@如下语句到 标准 Go makefile中 将引入所有的 $GOPATH 的pkg 目录

`GOPATHSEP=:
ifeq ($(GOHOSTOS),windows)
GOPATHSEP=;
endif
GCIMPORTS+=-I $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -I,$(GOPATH))/pkg/$(GOOS)_$(GOARCH)
LDIMPORTS+=-L $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -L,$(GOPATH))/pkg/$(GOOS)_$(GOARCH)

目录布局

导入 目录为 x/y/z的包的源文件在目录 (注意导入的包的名称
$GOPATH/src/x/y/z

导入目录为 x/y/z的包的二进制文件在 (注意生成的 包的名称 )
$GOPATH/pkg/x/y/z.a

文件位于 $GOPATH/src/A/B的 命令 的二进制文件在 (注意生成的命令的名称
$GOPATH/bin/B

仓库集成 和 创建 go install项目

go install,当获取一个包,根据包的导入路径如发现URL。如果尝试

若你想在你的自己的代码仓库中 “import a package” 你需要使用这个package的 “full import path”。也就是说,如果你想导入 “matrix” 这个包,你需要
import "code.google.com/p/gomatrix/matrix"
而不是
import "matrix" (需要使用全名)

技巧和窍门

第三方包

GOPATH设置两个目录很有用。第一个目录作为第三方包的存放位置,第二个目录作为你自己的项目。 将第三方的GOPATH放置到第一位,这样子 go install 将使用它作为认的位置。 然后你可以在第二个 GOPATH目录下工作,并且可以使用 go 命令(在第二个GOPATH西面使用 go 命令), go install等。

例:
上例中设置的 两个目录中,目录结构如下:

FAQ

为什么 $GOPATH/src/cmd/mycmd/*.go 没有编译?
当使用 go 命令 搜素包的时候,它总是首先搜索 $GOROOT$GOROOT中包含目录,当它在 $GOROOT 中找到一个 cmd/目录的时候 它不会继续寻找 any of the GOPATH directories.
这样可以防止你 定义你自己的 @H_13_32@math/matrix 和 cmd/mycmd的包。

(也就是顶级目录不能和 $GOROOT 下面的目录相同)。

大佬总结

以上是大佬教程为你收集整理的GOPATH 深度解析全部内容,希望文章能够帮你解决GOPATH 深度解析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。