2020.04.29 更新 =======
關于 goland 使用 go module 的最佳實踐,參見https://mp.weixin.qq.com/s/CbCbtu-CX9G_FHb2juMjXA
新建工程,GoLand -> Preferences -> Go -> Go Modules 勾選“enable go modules intergration”
在當前工程目錄下,go mod init 你的包名,之后:
- 直接run工程時,你引用的外部包會自動添加進go.mod
- 在工程中想引入自己的庫,在go文件中import “你的包名/*****”即可找到
注意:
- 被引的方法需要大寫開頭,否則視為私有,不能被外部訪問
- 使用 go module 能避免一些代碼環境遷移出現的問題,推薦使用
之前內容 =========
GO111MODULE
輸入go env
含義:
- GO111MODULE=off: 不使用 Module-aware mode。
- GO111MODULE=on: 使用 Module-aware mode,不會去 GOPATH 下面查找依賴包。
- GO111MODULE=auto或unset: Golang 自己檢測是不是使用Module-aware mode。(根據官方描述在不設置GO111MODULE的情況下或者設為auto的時候,如果在當前目錄或者父目錄中有go.mod文件,那么就使用Module-aware mode, 而go1.12中,如果包位于GOPATH/src下,且GO111MODULE=auto, 即使有go.mod的存在,go仍然使用GOPATH mode)
GO PROXY
GOPROXY環境變量是伴隨著modules而生,在go1.13中得到了增強,可以設置為逗號分隔的url列表來指定多個代理,其默認值為https://proxy.golang.org,direct。
direct:表示直接連接,所有direct后面逗號隔開都proxy都不會被使用。
這里可以設置GOPROXY=https://goproxy.io
一般默認沒有開,開啟方式:
Go版本>=1.13時,使用
go env -w GO111MODULE=on
(<1.13版本的方式)編輯下面的文件,export 設置,然后source文件
vim /etc/profile
vim ~/.zshrc
vim ~/.bash_profile
(Linux找環境變量的先后順序)
注意:在goland里的terminal使用go env 修改不了,會提示沖突,而且如果在preference中勾選里enable gomod,go env出來就是GO111MODULE=on
使用go module導入自己編寫的包
工程目錄結構如下,
試圖在main.go文件中引入modpkg的hello.go的Hello方法和world.go的World結構體
- goland設置
GoLand -> Preferences -> Go -> Go Modules
在工程目錄下打開終端
go mod init mymod
路徑下生成 go.mod 文件在 main.go 中引入
package main
import (
"fmt"
"mymod/modpkg"
)
func main() {
modpkg.Hello()
aa:=modpkg.World{}
fmt.Println(aa)
}
運行結果:
注意:打開go module go get 到的是最新帶版本號的包(所以一直開著就完事兒了)