關於go modules的使用外面的教程實在太多了,我這里只講下我自己使用的三種情形。
准備工作:
1、新建個文件加gomod_test。
2、在這個目錄輸入命令 go mod init gomod_test
情形一:比較常見的情況,引用github的包
比方我有如下代碼 main.go
package main import ( "fmt" "github.com/name/foo" ) func main() { foo.Foo() }
直接命令 go mod tidy,然后就可以go build編譯
情形二:引用自己工程里的包
目錄結構如下
gomod_test
|-----main.go
|-----mypackage
|---------mypackage.go
main.go要引用mypackage包,代碼改成如下。
注意 "gomod_test/mypackage",gomod_test是我們上面go mod init gomod_test的模塊名,mypackage是你的包目錄
package main
import (
"fmt"
"gomod_test/mypackage"
"github.com/name/foo"
)
func main() {
foo.Foo()
mypackage.XXX()
}
情形三:引用本地包
這種情況的原因是:比方我們依賴了github.com/name/mylib這個庫,但我們需要在純內網無外網環境下編譯,這時候go get不到github的代碼,就需要我們用replace替換成本地包。
1、首先我需要把github.com/name/mylib代碼下載下來,你可以直接下載zip,也可以clone,到工程根目錄
2、編輯go.mod文件加入下面這一行(也可以用go mod edit命令編輯,更正統一些)
replace github.com/name/mylib=> ./mylib
要確保 ./mylib跟你的下載代碼的目錄一致
目錄結構如下
gomod_test
|-----main.go
|-----mypackage
|---------mypackage.go
|-----mylib
|---------mylib.go
main.go 改成如下
package main import ( "fmt" "gomod_test/mypackage" "github.com/name/mylib" "github.com/name/foo" ) func main() { foo.Foo() mypackage.XXX() mylib.DoXXX() }
其他
1、如果想把將依賴復制到vendor下可以用go mod vendor命令
2、如果想用vendor里的依賴庫編譯可執行文件可以用命令 go build -mod=vendor
