官方golang包管理神器,值得一試!

這是一篇很短的文章,訴說着高效的包管理工具 go mod

我們上次說過如何讓一個項目在 Goland 編譯器跑起來,但是要自己去下包,要花不少時間找包下包,是不是很麻煩?

java 裏有一個叫 maven 的包管理工具, go 也有一個叫 go mod 的管理工具,可以管理項目引用的第三方包版本、自動識別項目中用到的包、自動下載和管理包。

怎麼用?

找到你的項目,直接執行

go mod init main.go

執行完會自動識別項目中用到的第三方包,並生成一個 go.mod 文件

$ cat go.mod
module collector_go

go 1.14

require (
	github.com/gogo/protobuf v1.3.1 // indirect
	github.com/golang/protobuf v1.4.2
	google.golang.org/protobuf v1.23.0
)

然後直接 buildrun 就會自動下載包啦~!

go build -o ./collector_go main.go

有一個小前提

golang>=1.12
添加環境變量 GO111MODULEon 或者 auto ,設置方法

go env GO111MODULE=on

他解決了什麼問題?

原來的包管理方式

  • 在不使用額外的工具的情況下,Go 的依賴包需要手工下載,
  • 第三方包沒有版本的概念,如果第三方包的作者做了不兼容升級,會讓開發者很難受
  • 協作開發時,需要統一各個開發成員本地$GOPATH/src下的依賴包
  • 引用的包引用了已經轉移的包,而作者沒改的話,需要自己修改引用。
  • 第三方包和自己的包的源碼都在src下,很混亂。對於混合技術棧的項目來說,目錄的存放會有一些問題

新的包管理模式解決了以上問題

  • 自動下載依賴包
  • 項目不必放在$GOPATH/src內了
  • 項目內會生成一個go.mod文件,列出包依賴
  • 所以來的第三方包會準確的指定版本號
  • 對於已經轉移的包,可以用 replace 申明替換,不需要改代碼

tips

Q1: 我的包下哪去了?

A: 依賴的第三方包被下載到了 $GOPATH/pkg/mod 路徑下。

Q2: GO111MODULE 的三個參數 autoonoff 有什麼區別?

A: auto 根據是否在 src 下自動判定, on 只用 go.modoff 只用 src

Q3: 依賴包中的地址失效了怎麼辦?比如 golang. org/x/… 下的包都無法下載怎麼辦?

A: 在 go.mod 文件裏用 replace 替換包,例如

replace golang.org/x/text => github.com/golang/text latest

這樣, go 會用 github.com/golang/text 替代 golang.org/x/text

Q4: 在 go mod 模式中,項目自己引用自己中的某些模塊怎麼辦?

A: go.mod 文件裏的第一行會申明 module main ,把這個 main 改爲你的項目名,引用的時候就 import "項目名/模塊名" 即可。

根據官方的說法,從 Go 1.13 開始,模塊管理模式將是 Go 語言開發的默認模式

參考掘金:https://juejin.im/post/5c9c8c4fe51d450bc9547ba1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章