天天看點

報錯package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of

https://blog.csdn.net/weixin_44676081/article/details/107279746

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)

1

2

3

解決方案

設定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"

————————————————

版權聲明:本文為CSDN部落客「、Edgar」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_44676081/article/details/107279746