【问题标题】:GoLand (JetBrains) shows error message "Unresolved Reference". But Code compiles and runsGoLand (JetBrains) 显示错误消息“未解决的参考”。但是代码编译并运行
【发布时间】:2020-04-20 17:00:17
【问题描述】:

我正在使用 Go 语言和 Jetbrains 的 GoLand IDE 编写一个项目。

在编写代码时,当引用确实存在并且程序编译和运行正确时,GoLand 会向我显示一条错误消息,例如 "unresolved reference"

这是我在 stackoverflow (Go - append to slice in struct) 上找到的一些代码的类似(但更简单)示例,用于重现此问题。

即使我已经实现了上面几行的方法,也会出现相同的错误消息。

package main

import (
    "fmt"
)

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) {
    box.Items = append(box.Items, item)
}

func main() {

    item1 := MyBoxItem{Name: "Test Item 1"}
    item2 := MyBoxItem{Name: "Test Item 2"}

    box := MyBox{}

    box.AddItem(item1)
    box.AddItem(item2)

    // checking the output
    fmt.Println(len(box.Items))
    fmt.Println(box.Items)
}

box.AddItem(item1)box.AddItem(item2) 标记为红色作为错误。如果我将光标移到它上面,它会显示unresolved reference "AddItem"。然而代码编译并运行。由于这是另一个 stackoverflow 问题的解决方案,我不认为代码是错误的。此外,我找不到任何错误。

[编辑:我从远程服务器加载代码并在我的私人电脑上进行本地编辑。完成更改后,我将其上传到远程服务器(使用 GoLands 工具,如“浏览远程主机”)并在那里构建和编译它。使用相同的代码在本地尝试后,有时会出现错误消息,有时会出现错误消息。我完全糊涂了]

【问题讨论】:

  • 我无法重现问题,运行 GoLand 2019.2.5。但是,我认为如果您使用 box := &MyBox{}box := new(MyBox) 将“修复”该问题。因为AddItem(box *MyBox)
  • 感谢@inkeliz 的回答。我尝试了两种变体,但没有区别。
  • 2020.1.4 版本同样的问题

标签: go jetbrains-ide goland


【解决方案1】:

我遇到过类似的问题,但更为普遍。甚至像fmt.Printf() 这样的事情也显示为未解决。能够通过转到 File -> Invalidate Caches / Restart 解决问题。

【讨论】:

  • 也适用于 IntelliJ Ultimate 2020.2
  • 这应该是公认的答案,谢谢!这将 100% 解决仅在 GoLand 中遇到此问题的每个人的问题。我的 Go 模块设置得很完美,所以建议从 GOPATH 转移到 GOMODULES 对上面的 cmets 没有帮助
  • 优秀。这解决了我对 Goland 2020.3 的问题
  • 谢谢。我越来越绝望了... File->InvalidateCaches 在 Goland 2021.1 中为我解决了这个问题
  • 这是一个救生员!在 Goland 2019.3.2 上也为我工作
【解决方案2】:

我正在使用 go 模块,它已通过以下方式解决:

  • 取消选择首选项->Go->GOPATH->使用系统环境中定义的GOPATH
  • 文件->使缓存无效/重新启动

【讨论】:

  • go mod vendor生成vendor目录又出现问题,删除vendor目录后会消失
【解决方案3】:

今天我遇到了这个问题,我修复了它以启用 go 模块集成。为了那个原因 Settings -> Go -> Go modules 然后启用 go modules 集成。 如果您在项目中使用 go 模块,这将起作用。

【讨论】:

    【解决方案4】:

    我刚刚从 Goland 中删除了该项目,并从现有文件中重新创建了它。这很奇怪,但确实有效。

    【讨论】:

      【解决方案5】:

      我回答有点晚了哈哈,但如果有人仍然遇到这个问题,我所做的只是删除 .idea 文件并在 GoLand 上重新加载项目(通过单击文件 -> 打开 -> 文件位置) .对我有用。

      【讨论】:

      • 确保创建 .idea 文件夹的备份,因为它包含一些本地环境 IDE 设置(Go 版本等)。
      【解决方案6】:

      我无法在 GoLand 2020.2 中重现该问题。我建议升级到它。

      如果这不能解决问题,那么您可以采取以下步骤来调查问题:

      • 您的项目是使用 Go 模块还是传统的 GOPATH?
      • 如果使用 GOPATH,您是否启用了 Settings/Preferences | Go | GOPATH 下的 GOPATH 索引?
      • 如果它使用 Go 模块,请检查是否在 Settings/Preferences | Go | Go Modules 下启用了支持,然后使用 Alt+Enter | Sync packages of‍‍ <project>

      【讨论】:

      • 2020.2我还能重现
      • 怎么样?更多详细信息将帮助我们了解您的问题并将其复制以提供解决方案或解决我们可能遇到的任何问题。
      • @disniper 同样的问题。我的项目在go/src/project/test.go 中,我不断收到github.com/thedevsaddam/govalidator 包中所有内容的此错误
      • @AminShojaei 你的项目是使用 Go 模块还是传统的 GOPATH?如果它使用 GOPATH,您是否在 Settings/Preferences | 下启用了 GOPATH 索引?去 | GOPATH?如果没有,是否在 Settings/Preferences | 下启用了 Go 模块支持?去 |转到模块,然后使用 Alt+Enter | 的同步包。如果这些都不能解决问题,请在我们的跟踪器上打开一个问题youtrack.jetbrains.com/issues/Go
      • @disniper 没错。 Git模块解决了我的问题。谢谢
      【解决方案7】:

      我找到了解决此问题的最佳方法。

      1. 关闭您的项目和 IDE
      2. 转到您的项目目录
      3. 删除 /.idea
      4. 尝试再次打开它

      呜呜呜,修复了

      【讨论】:

        【解决方案8】:

        我遇到了同样的问题,但它得到了奇怪的解决。所以我在vscode 中安装并打开了项目以继续编码。它开始安装一个名为gopls 的扩展。安装完成后,我返回 GoLand 关闭项目,但我等待索引完成。突然引用是绿色的!

        【讨论】:

        • 打开它 VSCode 一定已经以某种方式清除了 GoLand 缓存,并重新索引了您的代码。 File > Invalidate Cache/Restart... 是更好的方法
        【解决方案9】:

        其他 cmets 没有任何选择对我有帮助。我不得不在 Setting -> Go -> GOROOT 中切换 GO SDK 版本。 Goland 自动下载了 1.16 beta 1 版本并且可以正常运行。

        【讨论】:

          【解决方案10】:

          Goland 版本 2020.1:我打开了一个包含 golang 项目子文件夹的文件夹,但 goland 无法识别依赖项。我解决了这个问题设置Project GOPATH

          1. ctrl + alt + s
          2. 去 > GOPATH
          3. Project GOPATH中点击加号按钮+
          4. 添加你的golang的项目文件夹,例如:~/projects/my-golang-projects

          【讨论】:

            【解决方案11】:

            在 Goland 偏好设置中,如果您使用的是全局 GOPATH,请选中“索引整个 GOPATH”选项并点击应用。

            【讨论】:

              【解决方案12】:

              我在执行bazel run //:gazelle 时遇到了同样的问题,我通过执行 bazel 同步 (Bazel -> Sync -> Sync Project with BUILD Files) 解决了这个问题。但是您应该具有以下设置。

              (此修复适用于 Goland IDE,Mac。当然我们应该在 .bash_profile.zshrc 中添加 GOPATH)

              【讨论】:

                【解决方案13】:

                我通过重新安装 Go 到 D:\go 来解决它,然后重置 Go sdk。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-09-18
                  • 2012-04-24
                  • 1970-01-01
                  • 2022-06-10
                  • 1970-01-01
                  • 2023-03-09
                  • 2021-01-16
                  • 2021-02-17
                  相关资源
                  最近更新 更多