gopls是Go自动补全的唯一可靠来源,必须正确安装、被编辑器识别且项目处于模块上下文中三者缺一不可;需通过go install安装、配置PATH、启用官方Go扩展、确保go.mod存在并以模块根目录打开项目。
gopls 是 Go 自动补全的唯一可靠来源,不是装个插件就能生效——它必须正确安装、被编辑器识别、且项目处于模块上下文中,三者缺一不可。
gopls 已安装并可执行VS Code 或 GoLand 的补全失效,80% 源于 gopls 根本没跑起来。
go install golang.org/x/tools/gopls@latest(注意:不是 go get,后者已弃用)gopls version 应输出类似 golang.org/x/tools/gopls v0.15.2;若报 command not found,说明 $GOPATH/bin(或 $HOME/go/bin)未加入 $PATH
C:\Program Files\Go\bin;macOS/Linux 用户可在 ~/.zshrc 中追加 export PATH=$PATH:$(go env GOPATH)/bin
gopls
别信“Go Extension Pack”或旧版 “Go for Visual Studio Code”,只留一个:golang.go(由 Go Team 维护)。
Ctrl+Shift+P),输入 Go: Install/Update Tools,勾选 gopls 并安装"go.useLanguageServer": true —— 这是开关,某些旧配置可能被手动关掉gocode、gogetdoc、godef 的插件或配置项,它们与 gopls 冲突,会导致补全卡顿或提示错乱gopls: ready;若卡在 initializing 或报错,打开输出面板 → 切换到 gopls 日志查看具体失败原因(常见为 GO111MODULE=off 或代理超时)go.mod 根目录方式打开gopls 不会扫描子目录或单个文件——它只认当前工作区根目录下的 go.mod。
go.mod?在项目根目录运行 go mod init example.com/myapp(模块名可任意,但需是合法路径格式)vendor/?
go mod vendor 成功,再在 VS Code 中打开该目录(不是 vendor/github.com/xxx)go work init + go work use ./module1 ./module2 生成 go.work,VS Code 会自动识别为 workspaceGo (module: example.com/myapp);若显示 Go (GOPATH) 或无任何 module 提示,说明没识别到模块默认配置下,未导入包的方法、跨模块符号、甚至结构体字段都可能不出现——这不是 bug,是 gopls 的保守策略。
"go.gopls.completeUnimported": true(输入 http. 时能提示 HandleFunc 等,即使还没 import "net/http")"go.gopls.usePlaceholders": true(调用函数时自动填充形参名和括号,按 Tab 跳转)vendor 目录,必须设 "go.useVendor": true,否则 gopls 默认忽略所有 vendor/ 下的代码gopls 需索引依赖,CPU 占用高、补全延迟属正常;等待 10–30 秒,或重启语言服务器(Go: Restart Language Server)gopls 没看到 go.mod、PATH 里找不到二进制、或者 VS Code 打开的是子目录而非模块根目录——这三个点,比任何插件开关都关键。