【问题标题】:"package XXX is not in GOROOT" when building a Go project构建 Go 项目时出现“包 XXX 不在 GOROOT 中”
【发布时间】:2020-09-02 19:12:54
【问题描述】:

当我从这个项目中休息时,我遇到了一个奇怪的问题。在启动 Goland 时,我在尝试运行我的项目时遇到了很多错误。

在构建我的一个包时,具体错误是: start.go: package project/game is not in GOROOT (C:\Go\src\project\game)

我在C:\Users\username下有一个这样的文件夹结构

go
|-src
   |-project
        |-game
            |-entity
                 |-whatever.go
            |-game_stuff.go
        |-server

我的环境变量是这样的:

GOROOT=C:\Go 
GOPATH=C:\Users\ketchup\go 

对于每个模块(项目/游戏/实体、项目/游戏、项目/服务器),我做了一个git mod init

在构建时,Goland 会尝试运行这个:

C:\Go\bin\go.exe build -o C:\Users\ketchup\AppData\Local\Temp\___go_build_project_server.exe project/server

并返回错误。

谁能帮我解决这个问题?自从我上次打开 Goland 工作正常以来,有点迷路了。甚至不确定要看什么方向 - 我对 Go 还是很陌生,我不确定要看什么文档:\ 谢谢大家!

【问题讨论】:

  • 错误本身来自 Go,而不是 IDE。你能在它之前粘贴完整的错误和所有的 IDE 输出吗?如果需要,展开 gosetup 部分。

标签: go goland


【解决方案1】:

您可能将 GO111MODULE 设置为“on”,这将在 go mod 上。关闭 GO111MODULE 可能会解决此问题。

go env -w GO111MODULE=off

【讨论】:

    【解决方案2】:

    一个非常愚蠢的结论(主要是我自己),但我的问题来自于在每个文件夹中完成了go mod init。从我在 go mod init 中执行的每个文件夹中删除 go.modgo.dep 后,我可以毫无问题地构建(通过终端)

    另外,我在 GoLand 中的包没有被检测到,因为我在设置中启用了 Go 模块。我禁用了它,GoLand 能够索引外部包和我自己的包。

    【讨论】:

    • 这不适用于我的用例。有什么建议?我觉得这是一件很正常的事情。
    • 在 Intellij IDEA 上一定要激活“Language & Frameworks / Go / Enable Go Modules Integrations”,这对我有用! ty
    【解决方案3】:

    对于在停止使用 GoLand 后确实希望模块使用的任何人,请确保在“首选项”中选中“启用 Go 模块集成”:

    【讨论】:

    • 同意。它适用于 intellij Ultimate 和 Goland IDE。
    【解决方案4】:

    所以看起来如果你运行 go mod init 'xxx' xxx 是你项目的核心名称。在那里,主要包的完整名称是“xxx/main”,所以如果你的项目根文件夹是这样的:

    root -> go mod init xxx
     |- main.go -> package "main"
     |- tools
          |- helper.go -> package "tools"
    

    如果你想从 main.go 导入工具包,你需要导入这个“xxx/tools”

    【讨论】:

    • 并且要求tools/helper.go包必须和目录一样命名为“tools”。否则会出错。
    • 如果在没有IDE的情况下启动项目可能会遇到这种情况
    【解决方案5】:

    我错误地手动更改了go.mod 文件中的模块名称。修复后,效果很好。

    └── hello
        ├── go.mod
        ├── go.sum
        ├── hello.go
        └── morestrings
            ├── reverse.go
            └── reverse_test.go
    

    hello.go的摘录

    import (
    ...
    "hello/morestrings"
    ...
    )
    
    

    在 hello 目录中运行 go build 出现以下错误:

    hello.go:5:2: hello/morestrings 包不在 GOROOT (/usr/local/go/src/hello/morestrings)

    【讨论】:

      【解决方案6】:

      我在项目布局中遇到了同样的错误

           project
              |- pgk
              |- src
                  |-module1
                       |- some.go
                  |- main.go
      

      some.go

      package module1
      
      ...
      

      main.go

      import "project/module1"
      

      原来我通过./module1导入module1,出现错误package module1 is not in GOROOT。我通过import "project/module1"解决了。

      PS:golang project layoutsrc 不应该在 golang 项目中。

      【讨论】:

        【解决方案7】:

        在运行命令go mod init 时,您需要添加文件夹名称,而不是 main.go 页面名称。 喜欢:go mod init confirm_enrlconfirm_enrl 是项目文件夹名称

        【讨论】:

        • 考虑添加一些示例并为您的答案添加格式以帮助澄清您的答案:)
        【解决方案8】:

        当我在包名称中出现拼写错误时,我遇到了同样的错误。因此,它可能是此错误背后的根本原因。也许它会对某人有用。

        【讨论】:

          【解决方案9】:

          对于我的情况,只需将我的 go 版本 更新到最新即可解决问题。

          downloaded the latest binary 并安装了它,并且所有的繁荣都被分类了!

          【讨论】:

            【解决方案10】:

            当我使用 goland 默认 awesomeProject 关注 go 入门教程时,我遇到了同样的问题。 我在创建项目后执行此命令 go mod init example.com/hello 但我的根目录名称与 example.com/hello 不同。

            手动编辑 go.mod 文件并将awesomeProject 替换为example.com/hello 后,构建成功。

            【讨论】:

              【解决方案11】:

              我知道这是大约一年前的事了。我只是想与那些在本地文件夹中有模块的人分享相同的经验..

              问题是因为你没有将你的模块发布到像 github 这样的中心位置。 你必须运行这个命令来告诉 go 该模块是一个本地模块

              go mod edit --replace external_folder_module_name= ../pathItsLocated
              

              【讨论】:

                【解决方案12】:

                在构建 docker 映像时,我也遇到了类似的错误。错误是#19 0.785 controllers/vasaprovider_controller.go:28:2: package vasa-operator/config/configs is not in GOROOT

                在 Dockerfile 中添加 go 文件位置后,它对我有用。我添加的行是:

                COPY config/configs config/configs/
                
                COPY --from=builder /workspace/config/configs config/configs/
                

                【讨论】:

                  【解决方案13】:

                  就我而言,我试图从错误的目录构建。旧目录甚至没有任何.go 文件。

                  【讨论】:

                    【解决方案14】:

                    确保您的导入语句与您在 go mod 中定义的模块名称匹配。

                    【讨论】:

                      【解决方案15】:

                      只需使用 mod 文件初始化项目并开始处理根文件夹。

                      go mod init <name-anything>
                      

                      【讨论】:

                        猜你喜欢
                        • 2021-10-31
                        • 2021-01-30
                        • 1970-01-01
                        • 2021-03-13
                        • 2021-04-10
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2022-01-23
                        相关资源
                        最近更新 更多