扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
golang的 GOPATH和vendor的搜索关系
创新互联-专业网站定制、快速模板网站建设、高性价比顺河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式顺河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖顺河地区。费用合理售后完善,10余年实体公司更值得信赖。
项目只有一个包,即main包,没有引用其他的包(golang自带的系统包除外)。
然后设置GOPATH=path/to/goproject,再运行go build myproject,这样就可以在任何目录下面编译,编译生成的可执行文件就在编译所在的目录下,而不是包源文件所在的目录。
基本规则:
鉴于此,建议golang项目必须严格按照规范的目录结构组织,哪怕是前面这种自包含的项目。
基本规则:
如果一个包在vendor和GOPATH下面都存在那么谁会优先使用呢。
结论是:
包mydeps在vendor目录下面和GOPATH路径下面都存在了,那么main.go引用的时候只会引用vendor下面的mydeps(src/myproject/vendor/mydeps),而忽略GOPATH下面的mydeps包(src/mydeps)。
前面提到GOPATH和PATH类似,可以包含多个路径,中间用分号隔开,go在搜索包的时候会按手续从前往后搜搜。那么vendor怎么处理层级关系呢。
规则是:
举例:
如果src/mydep/mydep1/mydep.go引用了myvendor1和myvendor,那是怎么搜索的呢
可以简单理解为:
$GOPATH 是go的工程目录
/home/guest/gocode
├── bin
├── pkg
└── src
$GOROOT 是go的安装目录
/home/guest/tools/go
├── api
├── AUTHORS
├── bin
├── blog
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── doc
├── favicon.ico
├── lib
├── LICENSE
├── misc
├── PATENTS
├── pkg
├── README.md
├── robots.txt
├── src
├── test
└── VERSION
当然, 要执行go命令和go工具, 就要配置go的可执行文件的路径:
操作如下:
在~/.bash_profile中配置如下:
export $PATH:$GOROOT/bin
如果是windows需要使用 ; 符号分割两个路径, mac和类unix都是用 : 符号分割
在~/.bash_profile中添加如下语句:
GOPATH=/Users/username/gopath
在hello.go中输入:
在项目根目录下执行 go build 命令来构建你的项目, 构建后会生成hello文件
运行生成的文件 ./hello , terminal中输出: Hello, GO !
当然你也可以直接运行命令 go run hello.go 来执行程序.
如果要上述设置生效, 可以执行命令: source ~/.bash_profile , 上述所有操作均为mac系统下的操作, 如果是非mac系统, 请自行变通.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流