【发布时间】: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