src: 源码文件
bin: 编译生成的而可执行文件
pkg: 平台相关目录(目标操作系统目录),编译后生成的文件
pkg:保存归档文件(扩展名为 .a 的文件,即 archive 文件)这是程序编译后生成的静态库文件。
注意:在 pkg 下实际上还有一个平台相关目录(目标操作系统对应的目录),所有的归档文件都在这个目录下
当前出现了三个子目录
[root@localhost pkg]# ls linux_amd64 mod sumdb第一个目录 linux_amd64
因为该go环境是在Linux系统上运行的
//这个一个与平台相关的目录,即操作系统对应的目录 [root@localhost ligato]# pwd /root/go/pkg/linux_amd64/github.com/ligato [root@localhost ligato]# ls vpp-agent.a第二个目录 mod
[root@localhost mod]# ls 9fans.net cloud.google.com github.com golang.org google.golang.org go.starlark.net@v0.0.0-20200821142938-949cc6f4b097 go.uber.org mvdan.cc cache git.fd.io go.etcd.io go.ligato.io gopkg.in gotest.tools@v2.2.0+incompatible honnef.co sigs.k8s.io
开启GO11MODULE=on 后,go get 安装的包将到 go/pkg下
go get -m [packages]会将下载的依赖包放到GOPATH/pkg/mod目录下,
并且将依赖写入到go.mod文件.
go get -u=patch会更新主模块下的所有依赖包。
Go 1.11版本支持临时环境变量GO111MODULE,通过该环境变量来控制依赖包的管理方式。
-
当GO111MODULE的值为on时
那么就会使用modules功能.
这种模式下, G O P A T H 不 再 作 为 b u i l d 时 导 入 的 角 色 , 依 赖 包 会 存 放 在 GOPATH不再作为build时导入的角色,依赖包会存放在 GOPATH不再作为build时导入的角色,依赖包会存放在GOPATH/pkg/mod目录下。
工程中的依赖包也会从此目录下查找。 -
GO111MODULE=off时
go命令行将不会使用新的module功能,它将会在vendor目录下和GOPATH目录中查找依赖包。
这种模式叫GOPATH模式。
使用顺序为:
- 优先使用vendor目录下面的包,
- 如果vendor下面没有搜索到,再搜索$GOPATH/src下面的包,
- 如果 $GOPATH下面没有搜索到,那么搜索$GOROOT/src下面的包,
- 要么完整使用vendor下面的包,要么完整使用$GOPATH下面的包,不会混合使用。
- GO111MODULE=auto时
包引入的路径可以混合使用.
[root@localhost sumdb]# ls sum.golang.org
GOSUMDB
它的值是一个 Go checksum database,用于在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)
保证拉取到的模块版本数据未经过篡改,若发现不一致,也就是可能存在篡改,将会立即中止。
GOSUMDB的默认值为:sum.golang.org,在国内也是无法访问的,但是 GOSUMDB 可以被 Go 模块代理所代理(详见:Proxying a Checksum Database)。
因此我们可以通过设置 GOPROXY 来解决,而先前我们所设置的模块代理 goproxy.cn 就能支持代理 sum.golang.org,所以这一个问题在设置 GOPROXY 后,你可以不需要过度关心。



