Vscode 配置 Go 开发环境

安装 Go

  1. 下载 go 的安装包,在 go download 中选择对应的系统架构即可;

  2. 对于 win 和 mac 用户应该是直接安装即可,而对于 Linux 用户来说,需要将压缩包进行解压,并将解压后的文件夹移动到 /usr/local 目录下;(如果存在历史版本的 go,则需要删除原有的 go 文件夹)

# 删除历史文件夹,并解压
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz
  1. /usr/local/go/bin 添加到 PATH 环境变量中即可;
export PATH=$PATH:/usr/local/go/bin
# 执行以下命令,使得环境变量生效
source ~/.bashrc
  1. 在终端中输入 go version,如果能够显示 go 的版本号,则说明安装成功。
# 输入 go version
go version go1.20.4 linux/amd64

这里我的是 ARM 架构的,所以稍微有点区别,但是流程是一样的。

1

  1. 对 go 的环境变量 Proxy 进行配置,以便于在使用 go get 命令时能够正常下载包(这一步十分重要,对于后续在 vscode 中的编程有很大帮助);
# 设置代理
go env -w GO111MODULE=on
# 以下两个命令二选一即可
go env -w GOPROXY=https://goproxy.io,direct
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
  1. 当在终端中执行 go env 命令时,如果能够看到以下内容,则说明配置成功。
# go env
GO111MODULE="on"
GOPROXY="https://goproxy.io,direct"
GOSUMDB="sum.golang.org"
GONOPROXY=""
GONOSUMDB=""

3

安装对应插件

Go 插件

  1. 在 vscode 中安装 go 插件,这个插件是必须的。在 vscode 中按下 Ctrl + Shift + X,在搜索框中输入 go,然后选择第一个 Go 插件进行安装即可;

  2. 在 vscode 中安装其他相关包,这能帮助我们获得 go 的自动补全等功能。此时之前的 go proxy 配置就能够发挥作用了。在 vscode 中按下 Ctrl + Shift + P,在搜索框中输入 go: install/update tools,然后选择 Go: Install/Update Tools 进行安装即可,会输出如下图的 SUCCESS;如果不成功,你可以尝试重新启动 vscode 进行尝试,如果还不成功,则需要检查 go proxy 的配置是否正确。(具体原因我放在文章最后进行介绍)

4

5

Code runner 插件

  1. 和安装 go 插件过程相同,按下 Ctrl + Shift + X,在搜索框中输入 code runner,然后选择 Code Runner 插件进行安装即可;

Go 环境测试代码

  1. 创建一个用于测试的目录,例如 ~/go/src/test,然后在该目录下创建一个 main.go 文件,内容如下:
package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}
  1. 将终端的工作目录切换到 /code/go,首先执行 go mod init go,这一步的作用主要是初始化 go.mod 文件,从而方便后续的包管理;

  2. 由于 go 和 c 语言类似,都需要先编译再执行,所以我们需要先执行 go build 命令,然后再执行 ./test 命令,这样就能够看到输出的结果了。

  3. 当然 go 也是支持直接执行的,只需要执行 go run main.go 即可(推荐),但是这种方式只能够在当前目录下执行,如果需要在其他目录下执行,则需要先执行 go build 命令,然后再执行 ./test 命令。

  4. 如果安装了 code runner 插件,则可以直接按下 Ctrl + Alt + N 进行执行。

6

Go 调试配置

除了完成 go 的初始的环境配置之外,还需要对 vscode 进行一些简单的配置,这样才能够在 vscode 中进行调试。VSCODE 的 debug 功能其实很简单(按下 F5 就可以开始调试),但是在调试 Go 程序时,需要简单的配置下对应的 launch.json。
首先送上现在正在使用的一个 launch.json 的配置,这个配置是可以正常使用的,如果你在配置过程中遇到了问题,可以参考一下这个配置。

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "debug go", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "go", // 配置类型,这里只能为 go
"request": "launch", // 请求配置类型,可以为 launch(启动)或 attach(附加)
"mode": "debug", // 调试器模式,只能为 debug(调试)或 test(测试)
"program": "${workspaceRoot}/code/go/main.go", // 将要执行的程序的路径,其中 ${workspaceRoot} 为工作区的根目录
"env": {}, // 环境变量,如果不需要可以删除
"args": [], // 程序调试时传递给程序的命令行参数,如果不需要可以删除
"buildFlags": "-buildvcs=false" // 生成标记,如果不需要可以删除
},
]
}

7

Go proxy 配置

::: tip
该方案来自其他博客,我在实际操作中并没有使用该方案,所以不保证能够成功。一般第一种配置方法就能够成功(配置成功后重启 VSCODE),如果不成功,可以尝试该方案。
:::
如果第一部分中配置成功了,一般不会出现第二部分中插件安装不成功的问题,如果还是有问题,这里有一个其他的解决方案。

  1. 创建两个目录,分别为 gotoolsgoworks
  2. 设置 GOPATH 环境变量,将 gotools 添加到 GOPATH 中;
# 这里是你 gotools 目录的绝对路径
go env -w GOPATH=/home/username/gotools
  1. 进入 goworks 目录,执行 go mod init goworks,这一步的作用主要是初始化 go.mod 文件,从而方便后续的包管理;

  2. goworks 目录下执行以下命令:

export GOPROXY=https://goproxy.cn,direct
export GO111MODULE=on

go get -u -v github.com/stamblerre/gocode
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/zmb3/gogetdoc
go get -u -v golang.org/x/tools/cmd/godoc
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/derekparker/delve/tree/master/cmd/dlv
go get -u -v github.com/fatih/gomodifytags
go get -u -v github.com/josharian/impl
go get -u -v github.com/tylerb/gotype-live
go get -u -v github.com/cweill/gotests
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -u -v golang.org/x/tools/gopls
  1. 打开 VSCODE 的 Go 插件,并打开 setting.json 添加以下内容
{
"go.toolsGopath": "/home/code/.gocache/gotools", // tools的绝对路径
"go.goroot": "/usr/local/go",
"go.useLanguageServer": true,
"go.autocompleteUnimportedPackages": true,
"go.gocodeAutoBuild": true,
"go.gotoSymbol.includeGoroot": true,
"go.gotoSymbol.includeImports": true,
"go.buildOnSave": "package",
"go.vetOnSave": "package",
"terminal.integrated.env.linux": {
"GOPROXY":"https://goproxy.cn",
"GO111MODULE": "on"
},
}
  1. 配置工作区,同样打开对应的 setting.json 文件,写入下面内容:
{
"go.toolsGopath": "/home/code/.gocache/gotools", // tools的绝对路径
"go.goroot": "/usr/local/go",
"go.gopath": "/home/code/.gocache/gotools",
"terminal.integrated.env.linux": {
"GO111MODULE": "on"
},
}