Go 語言的GOPATH與gomod,新手坑

木大大發表於2021-11-06

幾個常用的環境變數

GOPATH: //go 的工作目錄
GOROOT//go 的安裝目錄
GOBIN//go 的bin檔案目錄
GO111MODULE//go mod 開關 on為開啟go mod
GOPROXY=https://goproxy.cn,direct // https://goproxy.cn,direct 國內代理

因為國內牆的緣故,需要設定代理,這樣在Vscode安裝package時就不會失敗。
go env -w GOPROXY https://goproxy.cn,direct

檢視go的設定命令
go env

GOPATH

GOPATH是早期的設定方式,將工作目錄設定GOPATH到全域性環境變數。

不同的專案都在GOPATH/src/下。很顯然這種設定方法是不太方便的,因為不同專案引用的package到放到了一起,這用git管理起來很麻煩,比如A專案引用了a,b兩個package,B專案引用了c,d兩個package,那麼如果我在A中修改了package的內容,我提交A專案時想要帶著package時就很麻煩。

其次是GOPATH需要設定全域性環境變數,很多新手在對這些不熟悉的時候,很容易出錯。專案名也必須不同。否則無法區分。

Go mod

go mod 正是為了解決上述問題(並不單單是上述問題,還有依賴引用問題)。在1.13以後開始推行。因為沒多長時間,所以現在網路上的教程兩種版本的都有,很容易混淆。

go mod可以完全替代GOPATH設定。只需要 go env -w GO111MODULE=on 開啟go mod

GOPATH 與 Go mod 兩種模式的專案啟動是不相同的

go env -w GO111MODULE=off 時,在 GOPATH 的根目錄就可以直接啟動專案

Go 語言的GOPATH與gomod,新手坑

go env -w GO111MODULE=off 時,需指進入專案啟動程式

呼叫第三方包的情況下,在當前目錄,即使指定了檔案路徑,仍執行失敗

Go 語言的GOPATH與gomod,新手坑

進入專案目錄,啟動成功

Go 語言的GOPATH與gomod,新手坑

沒有引入第三方包,指定路徑及啟動成功

Go 語言的GOPATH與gomod,新手坑

吐槽一句,這種設計坑真多,小白痛不欲生。

還有就是在安裝 gin 框架的時候執行 go get -u github.com/gin-gonic/gin 總是執行失敗,不得不說,這次真是被 topgoer.com gin框架/簡介 這文件給誤導了,文件看上去挺全的,可偏偏沒詳細介紹 GOPATH 與 Go mod 的區別。

go get -u github.com/gin-gonic/gin 命令在 go mod 模式下完全沒問題,但是在 GOPATH 模式下就不正常了。

GOPATH 與 Go mod 兩種模式是不相容的,建議使用 Go mod 模式就好。

更詳細參考文件 studygolang.com/articles/28712

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章