GoLand (JetBrains) 显示错误消息“Unresolved Reference”。但是代码编译并运行

Dav*_*vid 41 jetbrains-ide go goland

我正在 GoLanguage 中做一个项目,并使用 Jetbrains 的 GoLand 作为 IDE。GoLand 在 IDE 中向我显示一条错误消息(“未解析的引用”),但仍然可以正确编译和运行。

这是我在 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)
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

有人可以帮忙吗?非常感谢

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

Pat*_*ick 80

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

  • 还适用于 IntelliJ Ultimate 2020.2 (4认同)
  • 这应该是公认的答案,谢谢!这将 100% 解决仅在 GoLand 中遇到此问题的每个人的问题。我的 Go 模块设置完美,因此建议从 GOPATH 迁移到 GOMODULES 对上面的评论没有任何帮助 (4认同)
  • 这对我现在不起作用。使用今天最新的版本并选择所有选项。 (4认同)
  • 谢谢。我变得绝望了...... File->InvalidateCaches 在 Goland 2021.1 中为我解决了这个问题 (3认同)

pan*_*l-p 36

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

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

呜呜呜,已修复

编辑:更好的方法是尝试在 Goland 菜单中使用这个,
file -> repair IDE 它将刷新索引模块

  • 谢谢,可以确认这适用于 mac! (2认同)

Tem*_*jin 33

今天我遇到了这个问题,我通过启用 go 模块集成来解决它。对于 “设置”->“其他设置”->“Go 模块”,然后启用 go 模块集成。如果您在项目中使用 go 模块,这将起作用。


小智 11

我的答案有点晚了,哈哈,但以防万一有人仍然遇到这个问题,我所做的就是删除文件.idea并在 GoLand 上重新加载项目(通过单击文件 -> 打开 -> 文件位置)。为我做了这个伎俩。

  • 这是我必须做的。其他步骤(修复 ide、删除缓存、重新安装)均无效。 (2认同)

小智 8

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


dls*_*per 6

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

\n

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

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

  • 2020.2我仍然可以重现它 (3认同)

小智 5

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

  • 取消选择 Preferences->Go->GOPATH->Use GOPATH 在系统环境中定义
  • 文件->无效缓存/重启


小智 5

对于 Mac 用户,我通过将自定义标签设置为“unix”解决了这个问题。在Preferences > Go > Build Tags & Vendoring。在 中Custom Tags,输入unix.

在此输入图像描述

我在用着GoLand 2022.1.2