GO111MODULE=“off”
在GO111MODULE="off"
的條件下,並且寫的代碼不在$GOPATH/src
下,也就是說下面的main.go不在$GOPATH/src
目錄下面,同時我想要使用另一個module
里面的內容,並且這個module不是標准庫
,或者說不在GOROOT里(一般我們不會修改GOROOT中的內容)
運行代碼會報錯
main.go:4:2: cannot find package "module" in any of:
/usr/local/go/src/module (from $GOROOT)
/home/linux/go/src/module (from $GOPATH)
解決方案
設置GOPATH
go env -w GOPATH=~/test # 這里設置為 ~/test是因為我需要在~/test/src下面寫代碼
然后在$GOPATH/src
目錄下寫
go的編譯器會在$GOPATH/src
下面尋找對應的模塊,src下的每一個目錄都可以對應一個模塊,目錄中的目錄也可以是一個模塊,如果,我們需要訪問一個目錄中的目錄中的模塊,比如下圖
我們需要調用module中的moduleA模塊,只需要使用
import "module/moduleA"
GO111MODULE=“on”
在GO111MODULE="on"
的條件下,我們直接調用寫好的模塊,如下圖所示
會直接報錯
main.go:4:2: package module is not in GOROOT (/usr/local/go/src/module)
解決方案
- 第一種方式:設置
GO111MODULE="off"
,然后像上面的那種方式一樣設置GOPATH - 第二種方式:使用
go mod
,如下 (推薦 此項, 操作簡單)
首先我們需要初始化一個go.mod
,使用
go mod init test # test可以是任意的名稱
然后我們引入模塊的時候,以test
(初始化時定義)開頭,然后接模塊路徑,比如
import "test/module"
如果使用這種方式Goland報錯,但是可以進行正常編譯,那么可以刪除當前目錄下的
.idea
目錄然后重啟項目即可
如果我們想要引用嵌套模塊也是一樣的
import "test/module/moduleA"