1 ) 概述
管理方式 | 版本 | 发布时间 |
---|---|---|
GoPath 模式 | < 1.5 版本 | 2009.11.10 |
Go Vendor | >= 1.5 版本 | 2015.8.19 |
Go Modules | >=1.11 版本 | 2018.8.24 |
2 ) Go Modules 用法
GO111MODULE
来开启 Go Modules
GO15VENDOREXPERIMENT
这个环境变量类似GO111MODULE
也属于go的阶段性变量
GO111MODULE
,它有三个值
on
, 它表示开启 Go Modulesoff
它表示关闭 Go Modulesauto
Go Path
目录外部时
auto
的话,我们这个 GO111MODULE
就会被设置成 on
GO111MODULE
设置成 off
GO111MODULE
设置成 on
,然后通过 export
将这个环境变量导出export GO111MODULE=on
set
命令将 GO111MODULE
设置成 on
set GO111MODULE=on
go env -w GO111MODULE=on
-w
参数来将这个 GO111MODULE
设置成onwarning
go env
指令去覆盖我们环境变量的设置GO111MODULE
这个环境变量GO111MODULE
这个值,而不能通过命令的方式去设置/etc/profile
文件里~/bash.profile
文件里/etc/.bashrc
文件里~/.bashrc
文件里~/.profile
文件里GO111MODULE
,这个环境变量为ongo mod init
将项目初始化成一个 Go Modules 工程go.mod
的文件3 ) go mod 的具体用法
GO111MODULE
设置成 on
go version
Enable
Go modules integrationexport GOPROXY https://goproxy.cn/,https://mirrors.aliyun.com/goproxy/,direct
/etc/profile
里面set GOPROXY=https://goproxy.cn/,https://mirrors.aliyun.com/goproxy/,direct
go env -w GOPROXY=https://goproxy.cn/,https://mirrors.aliyun.com/goproxy/,direct
4 ) 工程示例
mkdir go-mod-test && cd go-mod-test
目录, 仅作为示例go mod init go-mod
创建一个go-mod工程目录touch main.go
package main
import 'github.com/astaxie/beego/logs'
func main() {
logs.Warn('demo')
}
go mod tidy
go run main.go
正常输出go mod download
go mod vendor
go mod vendor
go help mod
可以看到我们go mod支持的一些指令go mod graph
,go mod why
, 以及 go mod verify
go mod edit
, 我们可以用来编辑这个 go.mod 文件, 平时也很少使用, 我们了解即可5 ) 关于 go.mod 和 go.sum
1 ) go.mod
2 ) go.sum
go build
,go run
等指令go mod
标识,后面哈希值是 go.mod
的哈希go mod vendor
命令将依赖包全部下载到我们工程的根目录下的 vendor 目录下面
GOSUMDB
设置为off
的时候
需要注意的是,同一个模块版本的数据只会缓存一份。那所有其他模块呢都会共享使用。
如果你希望清除当前已经缓存的模块的版本数据,可以执行这个 $ go clean -modcache
6 ) go.mod 和 go.sum 对比
7 )关闭依赖包校验
GOSUMDB
设置成 off
就可以关闭我们当前的 go sum
校验
go env -w GOSUMDB=off
/etc/profile
8 ) 依赖包的存储对比
$GOPATH/src
go get
下载的包,也包含完整的仓库信息的,也就是包含了 .git 的目录GOMODULES
模式下,依赖包会存储在这个 $GOPATH/pkg/mod
下面