天天看點

項目遷往go mod

首先更新go語言版本至1.13以上,配置好相關常量

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
           

linux系統下進入目标項目目錄,執行

go mod init
           

能夠自動生成一個空的go.mod檔案,說他是空的是因為此時該檔案中不會标記任何包依賴

然後執行

go mod tidy
           

此指令會自動檢索項目中使用的依賴,自動下載下傳能夠下載下傳的那些依賴包,并記錄在go.mod以及go.sum中

指令執行完畢可以檢視go.mod,會發現已經自動幫我們加上了require(當然啦前提是你的項目有依賴包的話)

如果項目中有部份依賴是本地别的項目,則執行該指令時會報錯,會給我們指出是哪些依賴找不到

推薦趁此機會理一理項目中使用的依賴,将不必要的(如官方就有的)或是引入了兩個相同功能的(不同檔案相同功能引用不同的包)依賴進行清理

之後按照指令列出的找不到的依賴,一個一個确認他們在本地的相對路徑,并寫入go.mod中,格式如下

replace navi/kstgo => ../kstgo
replace 在項目中import的路徑 => 本地項目的相對路徑
           

以此法将所有依賴的本地項目全部引入,可執行多次 go mod tidy 來檢查是否已經能夠找到所有的包,如果沒報錯則可嘗試進行 go build

在引入本地項目的過程中,需要被依賴的本地項目也有go.mod檔案,即也需要mod化

個人感覺其實go.mod就相當于package.json,go.sum就相當于package-lock.json,go mod download就相當于npm install

附部分相關指令

指令 效果
go mod init 在項目中生成go.mod檔案
go mod tidy 檢索項目中使用的依賴并加入到go.mod檔案中
go get -u 更新現有的依賴
go mod download 下載下傳go.mod檔案中指明的所有依賴
go mod edit 修改go.mod檔案,直接vim應該也一樣
go mod vendor 導出現有的所有依賴
go mod graph 檢視現有的依賴結構【看不懂,感覺就是列印了go.sum
go mod verify 校驗一個子產品是否被篡改過

附一個完整的go.mod檔案内容範例

module navi/kvp-mps

go 1.13

require (
	baliance.com/gooxml v1.0.1
	github.com/astaxie/beego v1.12.0
	github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0 // indirect
	github.com/dgrijalva/jwt-go v3.2.0+incompatible
	github.com/go-redis/redis v6.15.6+incompatible
	github.com/go-sql-driver/mysql v1.4.1
	github.com/golang/protobuf v1.3.2
	github.com/jinzhu/gorm v1.9.11
	github.com/lib/pq v1.2.0 // indirect
	github.com/onsi/ginkgo v1.10.2 // indirect
	github.com/onsi/gomega v1.7.0 // indirect
	golang.org/x/text v0.3.2
	navi/kstgo v0.0.0-00010101000000-000000000000
	navi/kvp-soap v0.0.0-00010101000000-000000000000
	navi/kvp-tiny v0.0.0-00010101000000-000000000000
	navi/navi-go-log v0.0.0-00010101000000-000000000000
)

replace (
	navi/kstgo => ../kstgo
	navi/kvp-soap => ../kvp-soap
	navi/kvp-tiny => ../kvp-tiny
	navi/navi-go-log => ../navi-go-log
)