Go Mod、Local Package與Cross Compiling 問題
Go mod套件管理很好用,但是要引入local package(不管是自己寫的或是改人家的),就要花點功夫處理。之前引入的結果,因為要在docker容器的Linux上build (因為cgo打包需要的一些函式庫和tool chain只有ubuntu上環境比較齊全),反而出了一堆問題:
- package xxx is not in GOROOT
- local import "xxx" in non-local package
之類的...
整理後,大致上就是因為,go module採用不同的套件管理方式,不再依賴$GOPATH ,所以如果要導入本地套件,需要手動修改go.mod裡面的一些部分。並且很重要一點,被引入的套件本身也要有go.mod(換言之,就是要go mod init一次)。
參考文章:
- How to use local go modules with golang with examples
- Package Management With Go Modules: The Pragmatic Guide
以下是導入自撰寫/改寫的module package順序:
- 在要被導入的專案資料夾(假設為foo/bar)執行 go mod init
- 在要導入上述資料夾的專案(假設為foo/qux)先執行 go mod init
- main.go中導入採用 import "foo/bar"
- 在2.的go.mod內,修改
require ( foo/bar v0.0.0 // 自訂套件版本號為0 ) replace( foo/bar => ../bar // 存放自訂套件的相對或是絕對位置(以go.mod為起始) )
- 執行 go test看看有沒有錯誤
留言