go mod是golang1.11后新加的特性,利用go mod可以让工程和gopath分开,工程不用非得放在gopath下的src目录下了。go mod有以下命令:
1. 换国内源
由于众所周知的原因,利用go get拉取github开源代码时,经常会遇到无法拉取的问题。可以有两种方式设置国内代理源:
-
在IDE中(goland)中设置:
-
在windows下通过设置环境变量的方式(linux类似)
在系统变量中创建GOPROXY,并设置为:goproxy.io
2. go mod拉取gitlab私有仓库设置
- 在gitlab上创建一个personal_access_tokens,在gitlab中通过Settings->Access Tokens中创建personal_access_tokens.建议在Scopes中选择read_repositoty
- 在命令行输入:git config --global http.extraheader "PRIVATE-TOKEN: [your private token]"
- 如果你的gitlab不支持https, 需要再命令行执行:
注意,url.后面的地址是在gitlab中clone with SSH的地址,需要去掉最后的.git, 同样insteadOf的http地址最后也要去掉.git后缀。
- 然后可以在命令行里执行:
这个时候你的gopath下的pkg/mod下就会拉取到gitlab上的代码。
上面配置git config也可以直接打开.gitconfig文件进行设置:
3. go get使用
-
下载项目依赖
go get ./... -
拉取最新的版本(优先选择tag)
go get golang.org/x/text@latest -
拉取master分支的最新commit
go get golang.org/x/test@master -
拉取tag为v0.3.2的commit
go get golang.org/x/test@v0.3.2 -
更新
go get -u
4. go mod基本操作
-
初始化一个mod,模块名为你的项目名
go mod init 模块名 -
下载mod到本地cache
目前所有模块版本数据均缓存在@GOPATH/pkg/mod和@GOPATH/pkg/sum下 go mod download
5. go mod在IDE中使用
尽管我们在上面配置了gitlab私有仓库,可以通过go get拉取gitlab的代码,但有时候难免会存在在mod文件中已经配置了gitlab私有仓库的地址,可以仍然自动拉取的情况(比如,我的gitlab不支持https请求,只能通过ssh和http,那么即使在mod文件中的require写了gitlab代码地址,可是go mod自动拉取会失败,因为它默认通过https请求)。这时可以通过git clone的方式把gitlab上的代码拉下来,放在@GOPATH/mod文件夹下,然后在mod文件中的replace中把gitlab仓库的地址替换为本地已经拉取的地址,如下所示:
- 在require中添加:
- 在replace中添加: