Я делаю проект на GoLanguage и использую GoLand от Jetbrains в качестве IDE. GoLand показывает мне в IDE сообщение об ошибке («неразрешенная ссылка»), но все равно компилируется и работает правильно.
Вот аналогичный (но более простой) пример кода, который я нашел здесь, в stackoverflow (Go - добавить в структуру). Появляется такое же сообщение об ошибке. Но очевидно, что я реализовал метод несколькими строками выше.
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"
). Тем не менее, код компилируется и запускается. И поскольку это было решением другого вопроса о переполнении стека, я не думаю, что код неправильный. Более того, я не могу найти в нем ошибок.
Может кто поможет? Большое спасибо
[РЕДАКТИРОВАТЬ: я загружаю код с удаленного сервера и редактирую его локально на моем частном компьютере. После внесения изменений я загружаю его на удаленный сервер (используя инструменты GoLands, такие как «Обзор удаленного хоста»), собираю и компилирую его там. После локального тестирования с тем же кодом сообщение об ошибке иногда появляется, а иногда нет. Я совершенно запуталась]
box := &MyBox{}
илиbox := new(MyBox)
, это исправит. ПосколькуAddItem
- это(box *MyBox)
. - person Inkeliz   schedule 02.01.2020