Golang包不在GOROOT目录下 (/usr/local/go/src/packageName)。

22

嗨,有人可以帮我运行我的main.go吗:go run main.go

有两个相邻的文件夹:

proj1文件夹里包含main.go、go.mod

package1文件夹里包含package1.go、go.mod、utility.go

在main.go内部:

package main

import (
    "package1"
    "fmt"
)

func main() {
    y := package1.Struct1{
        v: "1",
    }
    z := package1.isTrue()
    fmt.Println(z)
}

我的包文件夹里面有一个 package1.go 文件。

package package1

type Package1 struct {}

func (a *Package1) IsTrue() bool {
    return true
}

我的 Go 版本:go1.15.2 linux/amd64

我的 Go 环境设置:

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/user1/.cache/go-build"
GOENV="/home/user1/.config/go/env"
GOMODCACHE="/mnt/sda5/gopath/pkg/mod"
GOOS="linux"
GOPATH="/mnt/sda5/gopath"
GOROOT="/usr/local/go"
...

我尝试了go install、go build等命令,在包文件夹内没有错误。

执行go mod vendor、go run main.go、go get -u package1等命令时,在proj1文件夹内运行时出现相同的消息:

package package1 is not in GOROOT (/usr/local/go/src/package1)

VS Code的Go插件检查器没有问题。 请帮忙,谢谢!


2
这不是模块使用或打包编译的方式。如何编写Go代码 逐步讲解了同类型的示例。 - JimB
1
如果您正确安装了最新版本的Go,我怀疑您将不需要查看或更改任何环境变量。换句话说,我认为接受的答案大多已经过时了。@JimB推荐的链接也已经过时。截至2022年,https://go.dev/doc/ 可能是一个很好的起点。 - PJ Brunet
4个回答

20

为了解决我遇到的错误:package package1 is not in GOROOT (/usr/local/go/src/package1),我必须确保环境变量被正确配置。

我在bashrc文件中添加了以下行:

export GO111MODULE=on
#GOPATH MUST BE OUTSIDE OF GOROOT directory!!!
export GOPATH=/mnt/sda1/programming/gopath
export PATH=$PATH:$GOPATH/bin

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

我在终端中加载了bashrc文件:

source ~/.bashrc

现在我能够使用Go语言编写程序了。

创建一个名为main的新文件夹...在这个main文件夹中:

创建一个名为main.go的文件,并以package main开头。

运行以下命令:

go mod init main

使用新包名创建另一个文件夹,例如:package1

package1文件夹内: 在所有文件的第一行中加入package package1 ... 但是不要在此包文件夹内创建MOD文件!!!

在您的main.go文件中,您可以导入该包并使用它

import "main/package1"
y := package1.Struct1{a: 1, b: 2,...}
z := y.func1()

2
我需要对此进行解释。 - Smile.Hunter
你需要哪部分的解释? - Russo
14
这似乎是一份神奇的舞步清单?如果您能解释每个步骤的作用以及我们为什么要这样做,但不改变原意,使内容更加通俗易懂。 - arshbot
1
嗨,我已经更新了答案,请看一下。 - Russo

12

这个页面是相关搜索结果中排名最高的...

包 xxxxx 不在 GOROOT (/usr/lib/go/src/xxxxx) 中

在我的情况下,我尝试执行:

go build mything

出现了这个错误。解决方法很简单,我需要更具体一些:

go build mything.go


2
谢谢您提供这个答案。我确实搜索过,最终找到了这里,并且这就是解决我的问题的方法。 - Sam Stoelinga

1

我遇到了同样的问题,但在我的情况下,我忘记了 .go 的后缀。所以在运行以下命令之后: 问题:go run main 解决方案:go run main.go 现在它可以正常工作了。


请勿复制现有答案:https://dev59.com/aVIG5IYBdhLWcg3wig8k#72224896/请提供翻译后的文本内容。 - General Grievance

0

该页面是关于……的顶级搜索结果。

包“xxxxx”不在 GOROOT 中(/usr/lib/go/src/xxxxx)

在我的情况下,我的文件名是“hello world.go”,但当我尝试“go run hello world.go”时,它给出了错误信息。

解决方法很简单,如果你的文件名有空格,你必须在终端中将其写为“go run hello\ world.go”。


目前来看,你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何解决所提出的问题。你可以在帮助中心中找到有关编写好的答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接