從gopath到go mod的一次嘗試
windows下的嘗試:
gomod初嘗試
-
下載官方包1.11(及其以上版本將會自動支援
gomod
) 預設GO111MODULE=auto
(auto
是指如果在gopath
下不啟用mod
)
go mod help
檢視幫助go mod init
<專案模組名稱>初始化模組,會在專案根目錄下生成go.mod
檔案。
go mod tidy
根據go.mod
檔案來處理依賴關係。
go mod vendor
將依賴包複製到專案下的vendor
目錄。建議一些使用了被牆包的話可以這麼處理,方便使用者快速使用命令go build -mod=vendor
編譯
go list -m all
顯示依賴關係。go list -m -json all
顯示詳細依賴關係。
go mod download <path@version>
下載依賴。引數<path@version>
是非必寫的,path
是包的路徑,version
是包的版本。
-
在
gopath
外新建一個專案,單獨開一個cmd
設定set GO111MODULE=on
(習慣性的和git初始化一樣)go mod init
然後報錯了。 正解如下:go mod xxx(module名稱可與檔名不同)
-
在專案目錄下執行
go mod tidy
下載完成後專案路徑下會生成go.mod
和go.sum
go.mod檔案必須要提交到git倉庫,但go.sum檔案可以不用提交到git倉庫(git忽略檔案.gitignore中設定一下)。
-
go模組版本控制的下載檔案及資訊會儲存到GOPATH的pkg/mod資料夾裡。
-
在國內訪問
golang.org/x
的各個包都需要翻牆,我們可以在go.mod
中使用replace
替換成github上對應的庫。(強烈建議翻牆,我使用的lantern專業版+proxifier)非常穩定
replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0 )
以下是在公司專案中碰到的幾點坑
-
在引用mongodb的包時候報錯
go mod labix.org/v2/[email protected]: bzr branch --use-existing-dir
解決辦法谷歌論壇
在go.mod中
replace ( labix.org/v2/mgo => github.com/go-mgo/mgo v0.0.0-20160801194620-b6121c6199b7 launchpad.net/gocheck => github.com/go-check/check v0.0.0-20180628173108-788fd7840127 )
- 引入本地包的方法(在go.mod中)
replace ( test => ../test )
- go.mod檔案必須傳入git伺服器上
linux下的嘗試
幾乎都是翻牆的問題
replace ( cloud.google.com/go => github.com/googleapis/google-cloud-go v0.34.0 github.com/go-tomb/tomb => gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 go.opencensus.io => github.com/census-instrumentation/opencensus-go v0.19.0 go.uber.org/atomic => github.com/uber-go/atomic v1.3.2 go.uber.org/multierr => github.com/uber-go/multierr v1.1.0 go.uber.org/zap => github.com/uber-go/zap v1.9.1 golang.org/x/crypto => github.com/golang/crypto v0.0.0-20181001203147-e3636079e1a4 golang.org/x/lint => github.com/golang/lint v0.0.0-20181026193005-c67002cb31c3 golang.org/x/net => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20180821212333-d2e6202438be golang.org/x/sync => github.com/golang/sync v0.0.0-20181108010431-42b317875d0f golang.org/x/sys => github.com/golang/sys v0.0.0-20181116152217-5ac8a444bdc5 golang.org/x/text => github.com/golang/text v0.3.0 golang.org/x/time => github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2 golang.org/x/tools => github.com/golang/tools v0.0.0-20181219222714-6e267b5cc78e google.golang.org/api => github.com/googleapis/google-api-go-client v0.0.0-20181220000619-583d854617af google.golang.org/appengine => github.com/golang/appengine v1.3.0 google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20181219182458-5a97ab628bfb google.golang.org/grpc => github.com/grpc/grpc-go v1.17.0 gopkg.in/alecthomas/kingpin.v2 => github.com/alecthomas/kingpin v2.2.6+incompatible gopkg.in/mgo.v2 => github.com/go-mgo/mgo v0.0.0-20180705113604-9856a29383ce gopkg.in/vmihailenco/msgpack.v2 => github.com/vmihailenco/msgpack v2.9.1+incompatible gopkg.in/yaml.v2 => github.com/go-yaml/yaml v0.0.0-20181115110504-51d6538a90f8 labix.org/v2/mgo => github.com/go-mgo/mgo v0.0.0-20160801194620-b6121c6199b7 launchpad.net/gocheck => github.com/go-check/check v0.0.0-20180628173108-788fd7840127 )
主要包括:golang.org
google.golang.org
gopkg.in
go.uber.org
cloud.google.com
在下載包時會有timeout 導致編譯失敗,以上是對應的github的庫
參考資料