GoLand (JetBrains) показывает сообщение об ошибке «Неразрешенная ссылка». Но код компилируется и запускается

Я делаю проект на 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, такие как «Обзор удаленного хоста»), собираю и компилирую его там. После локального тестирования с тем же кодом сообщение об ошибке иногда появляется, а иногда нет. Я совершенно запуталась]


person David    schedule 01.01.2020    source источник
comment
Я не смог воспроизвести проблему, запустив GoLand 2019.2.5. Однако я думаю, что если вы используете box := &MyBox{} или box := new(MyBox), это исправит. Поскольку AddItem - это (box *MyBox).   -  person Inkeliz    schedule 02.01.2020
comment
спасибо за ответ @inkeliz. Я пробовал оба варианта, но без разницы.   -  person David    schedule 02.01.2020
comment
Та же проблема в версии 2020.1.4   -  person Amin Shojaei    schedule 26.07.2020


Ответы (10)


У меня возникла аналогичная проблема, но она была гораздо более распространенной. Даже такие вещи, как fmt.Printf(), показывались как нерешенные. Удалось решить проблему, перейдя в Файл -> Недействительный кеш / перезапуск.

person phemmer    schedule 22.04.2020
comment
Работал также для IntelliJ Ultimate 2020.2 - person Marcel Kirsche; 18.08.2020
comment
ЭТО должен быть принятый ответ, спасибо! Это на 100% устранит проблему для всех, у кого возникла эта проблема, только в GoLand. Мои модули Go были настроены идеально, поэтому предложение перейти с GOPATH на GOMODULES не помогло из комментариев выше. - person James; 26.10.2020
comment
Отлично. Это решило мою проблему с Goland 2020.3. - person Andres; 06.01.2021
comment
Благодарю. я был в отчаянии ... Файл- ›InvalidateCaches решил эту проблему для меня в Goland 2021.1 - person Blafasel42; 12.04.2021
comment
Это спасатель! Также работал у меня на Goland 2019.3.2 - person Rajvir; 19.04.2021

Я использую модуль go, и он решается с помощью:

  • Отмените выбор настроек- ›Go-› GOPATH- ›Использовать GOPATH, определенный в системной среде.
  • Файл- ›Недействительные кеши / перезагрузка
person Benjamin Huo    schedule 11.01.2021
comment
Проблема возникает снова, если я создаю каталог vendor с помощью go mod vendor, и он исчезнет после того, как я удалю каталог vendor - person Benjamin Huo; 04.04.2021

Я просто удалил проект из Goland и воссоздал его из существующих файлов. Это было странно, но это сработало.

person koooyooo    schedule 25.02.2021

Я не могу воспроизвести проблему в GoLand 2020.2. Предлагаю перейти на него.

Если это не решит проблему, вы можете предпринять следующие шаги для изучения проблемы:

  • В вашем проекте используются модули Go или традиционный GOPATH?
  • Если он использует GOPATH, включили ли вы индексацию GOPATH в Settings/Preferences | Go | GOPATH?
  • Если он использует модули Go, убедитесь, что поддержка включена в Settings/Preferences | Go | Go Modules, а затем используйте Alt+Enter | Sync packages of‍‍ <project>
person dlsniper    schedule 06.01.2020
comment
Я все еще могу воспроизвести его в 2020 году. - person Reven; 23.07.2020
comment
Как? Более подробная информация поможет нам понять вашу проблему и воспроизвести ее, чтобы либо предоставить решение, либо исправить любые проблемы, которые могут быть на нашей стороне. - person dlsniper; 25.07.2020
comment
@disniper такая же проблема. Мой проект находится в go/src/project/test.go, и я продолжаю получать эту ошибку для всего в пакете github.com/thedevsaddam/govalidator - person Amin Shojaei; 26.07.2020
comment
@AminShojaei - ваш проект использует модули Go или традиционный GOPATH? Если он использует GOPATH, включили ли вы индексацию GOPATH в разделе «Настройки» / «Предпочтения» | Вперед | ГОПАТ? Если нет, включена ли поддержка модулей Go в Настройки / Предпочтения | Вперед | Перейти к модулям, а затем использовать Alt + Enter | Синхронизируйте пакеты ‹project›. Если ни один из этих способов не решит проблему, откройте проблему в нашем трекере на странице youtrack.jetbrains.com/issues. / Go - person dlsniper; 27.07.2020
comment
@disniper Верно. Модуль Git решил мою проблему. Благодарность - person Amin Shojaei; 27.07.2020

У меня была та же проблема, и она странным образом исправилась. Поэтому я установил и открыл проект в vscode, чтобы продолжить кодирование. Он начал устанавливать расширение под названием gopls. После завершения установки я вернулся в GoLand, чтобы закрыть проект, но дождался завершения индексации. Внезапно ссылки стали зелеными!

person Mohammadreza Mirhajianmoghadam    schedule 05.03.2020
comment
Открыв его, VSCode, должно быть, каким-то образом очистил кеширование GoLand и переиндексировал ваш код. Файл ›Invalidate Cache / Restart ... - лучший способ сделать это - person James; 26.10.2020

Сегодня я столкнулся с этой проблемой, я исправил ее, чтобы включить интеграцию модуля go. Для этого Настройки - ›Перейти -› Модули Go, затем включите интеграцию модулей Go. Это будет работать, если вы используете в своем проекте модули go.

person Temuujin    schedule 15.01.2021

Ни один вариант из других комментариев мне не помог. Мне пришлось переключить версию GO SDK в настройках - ›Go -› GOROOT. Голанд автоматически загрузил 1.16 beta 1 версию, и это сработало.

person user3514057    schedule 19.01.2021

Goland версии 2020.1: я открыл папку с подпапками проектов golang, и goland не распознал зависимости. Я решил эту проблему установкой Project GOPATH

  1. ctrl + alt + s
  2. Перейти ›ГОПАТ
  3. Нажмите кнопку с плюсом + В Project GOPATH
  4. Добавьте папку проекта вашего golang, например: ~/projects/my-golang-projects
person Urko    schedule 04.03.2021

В настройках Goland, если вы используете Global GOPATH, установите флажок «Индексировать весь GOPATH» и нажмите «Применить».

person Victor Cui    schedule 06.04.2021

Я решил это, переустановив Go to D: \ go, затем сбросив Go sdk.

person user15946006    schedule 17.05.2021