一、使用方式
- 首先完全开启
go modules
三种模式:on/auto/off
,默认为 auto:$GOPATH
下的项目不开启,非$GOPATH
下的开启
$ export GO111MODULE=on
- 在项目里初始化
go.mod
$ go mod init my-project-package-name
- 按需替换被墙的 module 地址
$ vi go.mod
replace (
cloud.google.com/go => github.com/GoogleCloudPlatform/google-cloud-go latest
golang.org/x/crypto => github.com/golang/crypto latest
golang.org/x/net => github.com/golang/net latest
golang.org/x/sync => github.com/golang/sync latest
golang.org/x/sys => github.com/golang/sys latest
golang.org/x/text => github.com/golang/text latest
google.golang.org/appengine => github.com/golang/appengine latest
)
- 自动下载依赖的 module(同时删除掉无用的)
$ go mod tidy -v
-
-v
啰嗦模式 - 完成后,生成
go.mod
的require
部分,和go.sum
文件 - 可以在
.gitignore
中忽略掉go.sum
,只需要保留go.mod
。 - 依赖的 module 被文件下载到
$GOPATH/pkg/cache/
和$GOPATH/pkg/mod/
文件夹下了
二、问题修复
通过开启 useLanguageServer
,修复 vscode 代码提示、跳转到定义等问题
$ go get github.com/saibing/bingo
{
"go.alternateTools": {
"go-langserver": "bingo"
},
"go.languageServerExperimentalFeatures": {
"format": true,
"autoComplete": true
},
"go.useLanguageServer": true
}
三、切换回 Vendor
模式
目前 go mod 各方面支持还不够完善,如果想切换回 vendor
模式,可以通过下面两种方式
# 临时切换
$ go mod vendor
$ go run -mod=vendor main.go
# 或设置成全局环境变量
# export GOFLAGS=-mod=vendor
$ go run main.go
四、后续
用了一段时间 go mod 后,发现 vscode 目前的支持非常差,代码提示方面存在各种问题,提示速度也慢了很多,难以忍受,所以选择暂时放弃使用,待完善后再来。
目前切换成 dep
方式管理依赖包
# 初始化
$ dep init
# 整理依赖包
$ dep ensure
# 更新依赖版本
$ dep ensure -update