![](/img/trans.png)
[英]How to display golang package full path in vscode when there are multiple package with same name?
[英]VSCode: Could not import Golang package
我正在我的 GoPath 中編寫一個 Go 項目,我正在使用 Redigo package 連接到 Redis 服務器。 該應用程序運行良好,但是在 VSCode 中,package 導入時出現這個惱人的錯誤,這會阻止 VSCode 提供智能感知建議
無法導入 github.com/gomodule/redigo/redis(導入路徑 github.com/gomodule/redigo/redis 沒有 package 數據)
這是我的 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 設置為 on,這是go env
的 output
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
我應該改變什么才能使這項工作?
在一些特定情況下,這會發生在我身上。 這是我的故障排除過程:
你運行go get github.com/gomodule/redigo/redis
嗎?
有時,當我在與項目不同的根目錄中打開編輯器時,我會遇到類似的問題。
. <- editor open here
|
|_Folder
| main.go
確保您的工具是最新的:運行ctrl
+ shift
+ p
,輸入Go
並選擇Install/Update tools
。
嘗試將您的項目移出 GOPATH,並為其設置 go.mod。
重啟編輯器
我在使用不同的 package 時遇到了同樣的問題(在 mac 上),
ctrl
+ shift
+ p
或cmd
+ shift
+ p
並更新/安裝 go 工具問題已解決
我遇到了類似的問題,但情況略有不同。 我在VSCode遠程遇到這個問題,連net/http
這樣的基礎庫都無法導入。 我發現是因為同一個package下的其他文件有些語法錯誤,比如undefined variables
。 當我解決了這些語法錯誤並重新啟動 VSCode 后,我發現問題解決了。
當我在一個 package 中有兩個文件具有不同的 package 名稱時遇到了這個問題。 例如:一個文件有package main
而另一個有package app
。
確保所有文件具有相同的 package 名稱將導致跨 package 的導入重新開始工作。
go mod init package_name
后跟go mod tidy
讓事情對我有用。 go mod tidy
安裝了軟件包並更新了 mod 文件。
我已經安裝在 Fedora 35 gcc-go上,卸載后一切正常。
sudo dnf remove gcc-go
這對我有用:
我最近遇到了同樣的錯誤,我的解決方案是確保我的項目 mod 文件的 go 版本與我系統上安裝的版本相同。
我遇到了同樣的問題,它來自go mod init packegeName
並命名為我的 package 'time' 編輯器給了我錯誤,所以我只是將它替換為 'timee' 我不知道實際發生了什么,但它工作正常
目錄名稱中可能存在無效字符。
如果您使用的是 Go 1.18+,這是多模塊工作區的新功能,一旦您在根項目文件夾中設置 go.work 文件,問題將不再存在,您可以查看以下鏈接了解更多詳細信息
我有同樣的問題,我嘗試:
ctrl+ shift+p(window) or cmd + shift + p(linux) mark all package 點擊ok 重啟vscode
完全重啟 vsCode 為我解決了這個問題。
注意cmd
+ shift
+ p
-> Developer: Reload Window
沒有修復它,只是完全關閉並重新打開 VS 代碼
遇到同樣的問題,用 goenv 重新安裝 go,然后我運行了一些go mod why
要檢查一切是否正常
設置你的工作區
gopls
支持 Go 模塊和 GOPATH 模式。 但是,它需要一個已定義的 scope,其中引用、重命名和實現等語言功能應該在其中運行。以下選項可用於配置此 scope:
模塊模式
一個模塊
如果您使用的是單個模塊,則可以打開模塊根目錄(包含
go.mod
文件的目錄)、模塊中的子目錄或包含模塊的父目錄。注意:如果您打開包含模塊的父目錄,則它必須只包含該單個模塊。 否則,您將使用多個模塊。
多個模塊
Gopls 有多種方法可以同時處理多個模塊,如下所述。 從Go 1.18開始,Go工作空間是首選方案。
Go 個工作區(Go 1.18+)
從 Go 1.18 開始,
go
命令通過go.work
文件原生支持多模塊工作區。 以 gopls@v0.8.0 開頭的gopls@v0.8.0
可以識別這些文件。因此,在 Go 1.18 及更高版本中處理多個模塊的最簡單方法是創建一個包含您希望處理的模塊的
go.work
文件,並將工作區根目錄設置為包含go.work
文件的目錄。例如,假設此存儲庫已簽出到
$WORK/tools
目錄中。 我們可以通過創建go.work
文件同時處理golang.org/x/tools
和golang.org/x/tools/gopls
:cd $WORK go work init go work use tools tools/gopls
...然后在我們的編輯器中打開
$WORK
目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.