Go笔记(5)可复用模块
这篇记录 go 中的可复用模块。
笔记(1)中有在初始阶段安装遇到问题的实验过程,本篇对模块详细解说。
package
- 基本复⽤模块单元:以⾸字⺟⼤写来表明可被包外代码访问
- 在 main 被执⾏前,所有依赖的 package 的 init ⽅法都会被执⾏;不同包的 init 函数按照包导⼊的依赖关系决定执⾏顺序;每个包可以有多个 init 函数;包的每个源⽂件也可以有多个 init 函数
- Go 未解决的依赖问题:同⼀环境下,不同项⽬使⽤同⼀包的不同版本;⽆法管理对包的特定版本的依赖
- Go 1.5之后,vendor ⽬录被添加到除了 GOPATH 和 GOROOT 之外的依赖⽬录查找的解决⽅案。
查找依赖包路径的解决⽅案如下:
(1)当前包下的 vendor ⽬录
(2)向上级⽬录查找,直到找到 src 下的 vendor ⽬录
(3)在 GOPATH 下⾯查找依赖包
(4)在 GOROOT ⽬录下查找
本地依赖
本地依赖性需要操作环境变量,修改路径后需要重启IDE
1 |
|
Q: 出现问题,atom中GO111MODULE=’off’,path也没有加上我在.bash_profile中添加的另一个路径。当我修改 GO111MODULE 时出现报错“go env -w GO111MODULE=… does not override conflicting OS environment variable”,修改不成功。
- GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
- GO111MODULE=on,模块支持,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
- GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
当前文件在包含go.mod文件的目录下面。
注:
在使用go modules时,GOPATH是无意义的,不过它还是会把下载的依赖存储在 $GOPATH/pkg/mod 中
也会把go install 的结果放在 $GOPATH/bin 中。
当modules 功能启用时,依赖包的存放位置变更为$GOPATH/pkg
允许同一个package多个版本并存,且多个项目可以共享缓存的module。
远程依赖
1 |
|
常⽤的依赖管理⼯具
godep https://github.com/tools/godep
glide https://github.com/Masterminds/glide
dep https://github.com/golang/dep
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!