VSCode: не удалось импортировать пакет Golang

Я пишу проект Go внутри своего GoPath, и я использую пакет Redigo для подключения к серверу Redis. Приложение работает нормально, однако в VSCode есть эта досадная ошибка при импорте пакета, которая не позволяет VSCode выдавать предложения intellisense.

Не удалось импортировать github.com/gomodule/redigo/redis (нет данных пакета для пути импорта github.com/gomodule/redigo/redis)

Это мой VSCode settings.json

{
    "editor.fontSize": 14,
    "editor.formatOnPaste": true,
    "editor.multiCursorModifier": "ctrlCmd",
    "editor.snippetSuggestions": "top",
    "extensions.ignoreRecommendations": false,
    "workbench.statusBar.visible": true,
    "workbench.iconTheme": "vscode-great-icons",
    "files.autoSave": "afterDelay",
    "go.useLanguageServer": true,
    "go.alternateTools": {
        "go-langserver": "bingo"
    },
    "go.toolsEnvVars": {
        "GO111MODULE": "on"
    },
    "go.languageServerExperimentalFeatures": {
        "autoComplete": true,
        "documentSymbols": true,
        "findReferences": true,
        "format": true,
        "goToDefinition": true,
        "goToTypeDefinition": true,
        "hover": true,
        "signatureHelp": true,
        "rename": true,
        "workspaceSymbols": true,
    },
    "go.lintTool": "golangci-lint",
    "go.lintFlags": [
        "--fast",
        "-E", "goimports",
        "-E", "gocritic",
        "-E", "gocyclo",
        "-E", "gosec",
        "-E", "maligned",
        "-E", "scopelint",
        "-E", "interfacer",
        "-E", "goconst",
        "-E", "unconvert",
        "-E", "unparam",
        "-E", "prealloc",
        "-E", "varcheck",
    ],
    "go.formatTool": "goimports",
    "editor.minimap.enabled": false,
    "breadcrumbs.enabled": false,
    "git.autofetch": true,
    "workbench.startupEditor": "newUntitledFile",
    "explorer.confirmDelete": false,
    "git.enableSmartCommit": true,
    "git.confirmSync": false,
    "window.zoomLevel": 0,
    "explorer.confirmDragAndDrop": false
}

У меня уже включен параметр GO111MODULE env var, это результат go env

set GOARCH=amd64
set GOBIN=C:\Users\Francesco\Go\bin
set GOCACHE=C:\Users\Francesco\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\Francesco\Go
set GOPROXY=
set GORACE=
set GOROOT=c:\go
set GOTMPDIR=
set GOTOOLDIR=c:\go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\Francesco\Go\src\test\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\FRANCE~1\AppData\Local\Temp\go-build928398422=/tmp/go-build -gno-record-gcc-switches

Что мне нужно изменить, чтобы это работало?

17 ответов

Решение

Со мной такое случается в нескольких конкретных ситуациях. Это мой процесс устранения неполадок:

  1. Вы бежали go get github.com/gomodule/redigo/redis?

  2. Иногда у меня возникает аналогичная проблема, когда я открываю свой редактор в корне, отличном от моего проекта.

.  <- editor open here
| 
|_Folder
  | main.go
  1. Убедитесь, что ваши инструменты обновлены: запустите ctrl + shift + p, тип Go и выбрал Install/Update tools.

  2. Попробуйте переместить свой проект из GOPATH и настроить для него go.mod.

  3. Перезагрузите редактор

У меня была такая же проблема с другим пакетом (на Mac),

  1. Обновите инструменты Go -ctrl + shift + p или же cmd + shift + p и обновить / установить инструменты go
  2. Перезапустить VScode

Проблема решена

Я столкнулся с похожей проблемой, но ситуация немного другая. Я столкнулся с этой проблемой в VSCode Remote и даже в базовой библиотеке, напримерnet/httpне может быть импортирован. Я обнаружил, что это произошло из-за некоторых синтаксических ошибок в других файлах того же пакета, напримерundefined variables. Когда я решил эти синтаксические ошибки и перезапустил VSCode, я обнаружил, что проблема решена.

Выполнение полного перезапуска vsCode устранило проблему для меня.

Примечаниеcmd+shift+p->Developer: Reload WindowНЕ исправил, только полное закрытие и повторное открытие кода VS

go mod init package_name а затем у меня все заработало. go mod tidy установил пакеты и обновил файл мода.

Это сработало для меня:

  1. Файл/Новое окно
  2. Файл/Добавить папку в рабочую область...

Я столкнулся с этой проблемой, когда в одном пакете было два файла с разными именами пакетов. Например: в одном файле package main в то время как другой был package app.

Обеспечение того, чтобы все файлы имели одно и то же имя пакета, приведет к тому, что импорт всего пакета снова начнет работать.

У меня были те же симптомы. В моем случае основной причиной было отсутствие «CGO_ENABLED=1». Потому что у меня в пакете был код «C».

Я установил на Fedora 35 gcc-go, и после удаления все заработало нормально.

      sudo dnf remove gcc-go

Настройка вашего рабочего пространства

goplsподдерживает как модуль Go, так и режимы GOPATH. Однако для этого требуется определенная область, в которой должны работать языковые функции, такие как ссылки, переименование и реализация.

Для настройки этой области доступны следующие параметры:

Модульный режим

Один модуль

Если вы работаете с одним модулем, вы можете открыть корень модуля (каталог, содержащийgo.modфайл), подкаталог внутри модуля или родительский каталог, содержащий модуль.

Примечание . Если вы открываете родительский каталог, содержащий модуль, он должен содержать только этот единственный модуль. В противном случае вы работаете с несколькими модулями.

Несколько модулей

В Gopls есть несколько вариантов одновременной работы с несколькими модулями, описанных ниже. Начиная с версии Go 1.18 предпочтительным решением являются рабочие области Go.

Рабочие области Go (Go 1.18+)

Начиная с Go 1.18,goкоманда имеет встроенную поддержку многомодульных рабочих пространств черезфайлы. Эти файлы распознаются gopls, начиная сgopls@v0.8.0.

Таким образом, самый простой способ работать с несколькими модулями в Go 1.18 и более поздних версиях — создать файл, содержащий модули, над которыми вы хотите работать, и установить корневой каталог рабочей области в каталог, содержащий файл.

Например, предположим, что это репо извлечено в$WORK/toolsкаталог. Мы можем работать на обоихgolang.org/x/toolsиgolang.org/x/tools/goplsодновременно с созданиемgo.workфайл:

       cd $WORK
go work init
go work use tools tools/gopls

... с последующим открытием$WORKкаталог в нашем редакторе.


Источник

если вы используете Go 1.18+, вот новая функция для многомодульных рабочих пространств. Как только вы настроите файл go.work в корневой папке проекта, проблем больше не будет, вы можете проверить следующие ссылки для получения более подробной информации.

  1. /questions/51991590/linter-v-vs-kode-ne-rabotaet-dlya-paketov-iz-neskolkih-fajlov/51991605#51991605
  2. https://github.com/golang/tools/blob/master/gopls/doc/workspace.md

Если это репозиторий, который вы извлекли из Github, и вы столкнулись с ошибкамиpackage/s could not be imported и есть в репо, я сделал следующее, чтобы исправить:

  1. Откройте терминал и перейдите в корень проекта, где находится вашgo.modиgo.sumрасположены и запускаются:
      go mod download

В меню справки указано, что команда:downloads modules to local cache

  1. Внутри VS Code откройте палитру команд с любой командой, которая у вас есть для вашей архитектуры. Для моей команды на Mac я используюcontrol + shift + pи искатьGo: Install/Update tools. Нажмите Enter и обновите инструменты Go.

После этого мойmain.goобновлен пакетами, которых мне не хватало, без явного запускаgo install thingVSCodeSaidIWasMissing

Столкнулся с той же проблемой, переустановил go с goenv, а затем запустил несколькоgo mod whys проверить, все ли в порядке и

Я недавно столкнулся с этой же ошибкой, мое решение заключалось в том, чтобы моя версия файла мода моего проекта была той же версии, что и версия, установленная в моей системе.

Возможно, в имени каталога есть недопустимый символ.

у меня такая же проблема была от go mod init packegeNameи назвал мой пакет «время», и редактор дал мне ошибку, поэтому я просто заменил его на «время», я не знаю, что происходит на самом деле, но он работает нормально

Моя проблема заключалась в том, что у меня была корневая папка ( папка My Parent), которая была родительской папкой моего проекта Go, открытой в VSCode.

то есть,

      My Parent folder
    My Go Project folder

Вместо открытия родительской папки ( папка My Parent) вы можете просто открыть папку проекта ( папка My Go Project)

В моем случае мне нужен был доступ к файлам в обеих папках, поэтому я добавил родительские и дочерние папки в рабочее пространство VSCode, как здесь , и это избавило от ошибок

Другие вопросы по тегам