Go modules 使用
一、使用方式
- 首先完全開啓
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