likes
comments
collection
share

Golang 开发使用 VSCode 完全配置指南 | 🏆 技术专题第二期征文

作者站长头像
站长
· 阅读数 17

近期和朋友合作完成一个项目,后端使用 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 - 补充信息

补充内容,也是近期写代码时候发现的问题

  1. gurugogetdoc 都是代码描述提示,建议使用 gogetdoc
  2. godoctor 不再更新可以不考虑安装使用,可替代是 golint
  3. goimportsgoreturns 是格式化和包引用管理,建议使用 goreturns
  4. 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

自动安装

  1. 打开 vscode
  2. 打开 vscode 控制台
  3. 输入 go mod init v2,使用 mod 的 v2 版本
  4. 等待 vscode 右下角提示有可以用的插件安装,注意识别仅为 gopls 的插件再按确定 install
  5. 等待命令自动执行完成

配置 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 吉祥物感谢您的观看

Golang 开发使用 VSCode 完全配置指南 | 🏆 技术专题第二期征文

🏆 技术专题第二期 | 我与 Go 的那些事......

版权声明: 本文版权属于作者 林林林小帅,未经授权不得转载及二次修改。 转载或合作请在后台留言及联系方式。