Golang 开发使用 VSCode 完全配置指南 | 🏆 技术专题第二期征文
近期和朋友合作完成一个项目,后端使用 Golang 来进行编写。那么我又把 Golang 重新捣鼓起来了,然后看了一下文件记录,都一年多没有写了。
看了下 Golang 社区发现 都更新到 1.13.8 版本了,我的还是 1.11.2 版本。所以又把之前的配置记录翻了出来。等我全部配好之后发现和一年前差别有点大,多了大概8个模块,语法提示、模块支持、引用追踪、跳转定义、跳转实现、自动导入管理等。
这个过程也花了点时间,也踩了一点坑,比如一些模块只支持 x64
版本,一些模块无法正常使用 go get
等。
好了,废话不多说,直接进入正题。
01 - 系统环境
前置知识点:系统/用户环境变量
- GOROOT Go 源码存放目录,如果是 msi 安装包则默认为 c:/go。
- GOPATH Go 项目/工程的工作区,它包含 3 个主要目录(目录名均为小写)
- bin 编译/构建后,可执行文件目录。(Executable File)
- pkg 归档文件目录。(Archive File)
- src 项目/工程的源码文件目录。(Source File)
- GOCACHE Go 命令将在其中存储缓存信息以供将来生成时重复使用的目录。
- GOTMPDIR Go 命令将在其中写入临时源文件、软件包和二进制文件的目录。
这里就不重复说明如何配置 Go 开发环境了。 如果不太了解则可以参考:Golang 入门前你要了解的
02 - 开发支持环境
VS Code 开发环境所需支持模块,全部安装完成会生成 17
个可执行文件。
(这里以 Windows 为例)
golang.org/x/
需要放在 %GOPATH%/src/golang.org/x/
目录下。
分别将支持包 clone 下来。
git clone https://github.com/golang/tools.git (工具集以及包源代码)
git clone https://github.com/golang/lint.git (lint 大家都不陌生了)
git clone https://github.com/golang/mod.git (mod 模块支持)
git clone https://github.com/golang/xerrors.git (错误值转换包)
go install
需要手动进行安装来获取支持模块。命令推荐在 %GOPATH%
下执行,不然可能会安装到其他路径。
go install golang.org/x/lint/golint
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
其他包 (install || import)
需要 install
或者 import
来进行使用,但更推荐使用 install
方式。安装方式同上。
git clone https://github.com/golang/net.git (网络包)
git clone https://github.com/golang/sync.git (同步/原子包)
git clone https://github.com/golang/crypto.git (加密包)
git clone https://github.com/golang/debug.git (debug 工具包)
git clone https://github.com/golang/oauth2.git (oauth2 认证包)
git clone https://github.com/golang/protobuf.git (protobuf 协议包)
以上为额外的且常用的一些功能的源码扩展包,如有需要则可以考虑使用,当然也可以使用第三方实现的包。
github.com/
需要放在 %GOPATH%/src/github.com/
目录下。可直接通过 go get
方式安装
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/godoctor/godoctor
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/fatih/gomodifytags
go get -u -v github.com/haya14busa/goplay/cmd/goplay
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -u -v github.com/cweill/gotests/...(三个点不是错误,真的)
非正常情况
无法正常使用 go get
安装时,使用 clone
并通过 go install
方式安装,注意要在 %GOPATH%
下使用命令。
go get -u -v github.com/sqs/goreturns (无法正常安装时使用以下命令)
git clone https://github.com/sqs/goreturns.git
go install github.com/sqs/goreturns.git
go get -u -v github.com/josharian/impl (无法正常安装时使用以下命令)
git clone https://github.com/josharian/impl.git
go install github.com/josharian/impl
dlv 比较重要,如果是 x64 系统的还是建议安装此模块,此模块可以通过开发工具或编辑器工具来直接 debug 调试 go 代码。
(该支持模块只支持 x64 版本,千万注意系统版本和 Golang 版本)
go get -u -v github.com/go-delve/delve/cmd/dlv (无法正常安装时使用以下命令)
git clone https://github.com/go-delve/delve.git
(go-delve 目录需要手动创建,然后将 delve 放进去)
go install github.com/go-delve/delve/cmd/dlv
gocode (核心 - 语法相关)
# go 语法与自动补全,gocode-gomod 需要使用 VS Code 提示安装完成。
https://github.com/stamblerre/gocode.git (支持模块)
go get -u -v github.com/stamblerre/gocode
https://github.com/mdempsky/gocode.git (Go > 1.8 不支持模块)
go get -u -v github.com/mdempsky/gocode
https://github.com/nsf/gocode.git (旧版本,且不再维护)
go get -u -v github.com/nsf/gocode
03 - VS Code 配置
VS Code 需要修改一下配置,然后这些模块就可以发挥全部功能了。
文件 -> 首选项 -> 设置 -> settings.json
新增如下内容
{
"go.buildOnSave": "workspace",
"go.lintOnSave": "package",
"go.vetOnSave": "workspace",
"go.coverOnSave": false,
"go.lintTool": "golint",
"go.useCodeSnippetsOnFunctionSuggestWithoutType": true,
"go.useCodeSnippetsOnFunctionSuggest": true,
"go.autocompleteUnimportedPackages": true,
"go.gocodePackageLookupMode": "go",
"go.inferGopath": true,
"go.docsTool": "gogetdoc",
"go.formatTool": "goreturns",
}
以上是 我自己用得比较舒服的配置方案,当然各位小伙伴也可以修改为自己觉得舒服的配置,例如在配置中搜索 go.docsTool
就可以看到该配置的值有哪些,然后自己尝试即可。
04 - 最终情况
全部安装完成会在 %GOPATH%/bin
目录下,那么最终的 17
个模块为:
dlv.exe gomodifytags.exe
fillstruct.exe gopkgs.exe
go-outline.exe goplay.exe
go-symbols.exe gorename.exe
gocode-gomod.exe goreturns.exe
gocode.exe gotests.exe
godef.exe guru.exe
godoctor.exe impl.exe
golint.exe
05 - 补充信息
补充内容,也是近期写代码时候发现的问题
guru
和gogetdoc
都是代码描述提示,建议使用gogetdoc
godoctor
不再更新可以不考虑安装使用,可替代是golint
goimports
和goreturns
是格式化和包引用管理,建议使用goreturns
github.com/stamblerre/gocode
这个支持gocode mod
的包有Bug
牵引过多资源非常卡,占用大量 CPU 资源,不要安装使用!!!
如果是 go mod
模式开发推荐使用 gopls
!!!,VS Code 插件发现 go 项目使用了 mod 模式后会提示你安装。
06 - go mod & gopls
如果你想使用 go mod
,那么请先配置 GOPROXY
国内镜像代理任选其一:
- 七牛: GOPROXY=
https://goproxy.cngoproxy.cn
- 阿里云:GOPROXY=
https://mirrors.aliyun.com/goproxy
配置 GOPROXY
配置方式 Windows
# Windows 1
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
# Windows 2
# 1. 打开并编辑系统环境变量
# 2. 新增 GOPROXY 变量名
# 3. 填写变量值 https://goproxy.cn
# 4. 确定并重启控制台
配置方式 macOS & Linux
# macOS & Linux 1
$ export GO111MODULE=on
$ export GOPROXY=https://goproxy.cn
# macOS & Linux 2
$ echo "export GO111MODULE=on" >> ~/.profile
$ echo "export GOPROXY=https://goproxy.cn" >> ~/.profile
$ source ~/.profile
安装 gopls
配置完成 GOPROXY
后,才开始进行安装 gopls
手动安装
go get golang.org/x/tools/gopls@latest # 可获取最新版本的 gopls
自动安装
- 打开 vscode
- 打开 vscode 控制台
- 输入
go mod init v2
,使用 mod 的 v2 版本 - 等待 vscode 右下角提示有可以用的插件安装,注意识别仅为
gopls
的插件再按确定install
- 等待命令自动执行完成
配置 vscode gopls
VS Code 需要修改一下配置 文件 -> 首选项 -> 设置 -> settings.json
gopls 就可以正常工作了。
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
// Optional: Disable snippets, as they conflict with completion ranking.
"editor.snippetSuggestions": "none",
},
"[go.mod]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
},
"gopls": {
// Add parameter placeholders when completing a function.
"usePlaceholders": true,
// If true, enable additional analyses with staticcheck.
// Warning: This will significantly increase memory usage.
"staticcheck": false,
},
最后
由于 你懂的
原因,大部分插件是无法通过正常方式安装的,当然你是科学上网的 Geek 那么这些问题真的不用担心,也大概率不会碰到。
我也是在尝试的过程中碰到了很多问题,然后慢慢去了解、拦截数据、分析、问问老外,然后才把这些问题解决,最后能够通过正常方式让 VSCode 能够拥有完整的从支持插件来支持体验完整的 Golang 编写。
如果能够帮助你,我甚感欣慰,如果你在这个过程中还遇到其他问题,欢迎留言,并 请描述操作过程以及关键部分的截图 。尽可能的为你解答。
最后的最后
Golang 吉祥物感谢您的观看
版权声明: 本文版权属于作者 林林林小帅,未经授权不得转载及二次修改。 转载或合作请在后台留言及联系方式。
转载自:https://juejin.cn/post/6861581078721740807