每次配好后,长时间不用动,下次再配置的时候仍然不熟悉,特此记录以备忘。
直接应用
①gopath系统环境变量设置:
这个设置以后,系统默认的go环境就指定好了,如果不重新指定,则默认识别的都是这里设置的(包括代码提示引用的路径、三方包go get安装的路径)。常用于统一存放第三方包和安装的bin插件。
- mac系统在~/.bash_profile文件中添加:
# 创建一个global作为默认go项目,用作系统默认go环境,主要用于存放三方包
GOPATH="/Users/shuai/Documents/global"
export GOPATH
export PATH=$GOPATH:$PATH
export PATH=$GOPATH/bin:$PATH
- windows系统在环境变量中添加:GOPATH新变量,并将GOPATH/bin追加到系统变量PATH路径里。
②vscode>“用户设置”,第三方包依赖的插件路径
由于vscode支持为每个项目单独设置环境:“工作区设置”。为了避免每个工作区重复下载依赖的插件,可以手动指定插件统一依赖于系统环境指定的GOPATH(我们安装的包默认也是放在这里的),参考①。
"go.toolsGopath":"/Users/shuai/Documents/global"
③vscode>打开项目的“工作区设置”,为每个项目设置单独的gopath:
"go.gopath": "/Users/shuai/Documents/project_a"
④安装vscode的插件。
go get xxx
国内墙网络问题解决办法:
- 方式1:手动下载,一般在github上下载即可,放到系统环境变量指定的GOPATH的src下,按目录建好,然后执行go install。如果实在是网络较差,可以使用golang三方包下载。
- 方式2:给vscode配置代理,一劳永逸,不过需要先找到免费代理或购买代理。
以上操作完成即可正常开发,下面是详解。
GOPATH讲解
gopath分为系统环境和vscode环境。
- 系统环境
通过命令go env可以查看
,设置的方法就是添加环境变量GOPATH:
//mac环境下在~/.bash_profile文件中添加
GOPATH=指定路径
export GOPATH
export PATH=$GOPATH:$PATH //将GOPATH放到环境变量中,也可以不放。
- vscode环境
如果vscode不指定go.gopath,则默认使用系统环境GOPATH。
// “用户设置”:全局环境,所有打开的窗口项目公用的。
// “工作区设置”:打开项目的独立设置,右上角下拉菜单选择。
"go.gopath": "指定路径"
GOBIN讲解
gobin的作用:用于指定编译后生成的可执行文件所在的目录。
1. 如果不指定GOBIN,编译后的可执行文件默认放在GOPATH/bin下。
2. 指定GOBIN,则无论GOPATH设置为什么,都只会放在指定的GOBIN下。
注:通常情况下,我们不特别设置GOBIN,让它放在GOPATH/bin下就好。同时为了让系统全局识别可执行文件,还需要将GOPATH/bin放到环境变量中。
# 将GOPATH/bin添加到PATH系统环境变量中
export PATH=$GOPATH/bin:$PATH
注:坑点
- 我们知道go编译生成的bin文件会默认放在GOPATH/bin下,那么如果vscode为每个项目单独指定了(“工作区设置”)自己的“go.gopath”,这就覆盖了系统环境的GOPATH。
- 而我们命令行中
go get
或go install
安装的bin文件默认是放在系统环境GOPATH/bin下。 - 因此项目单独设置的“go.gopath”下的bin文件夹下是没有那些在系统环境下已经安装好的bin文件的,于是vscode会提示你当前这个独立设置的项目缺少依赖的第三方包,需要安装。
- 但其实我们系统环境GOPATH/bin下已经装过了,你可以拷贝到单独项目的gopath/bin下。更简便的做法像上面【直接应用】里做的那样,vscode>用户设置里,设置"go.toolsGopath"即可。
"go.toolsGopath": "系统环境GOPATH" // 系统环境GOPATH/bin作为插件识别路径
vscode的go插件安装
vscode默认会提示安装缺少的插件,但有些插件需要翻墙,需要手动安装。
不需要翻墙的可直接go get,否则需要手动下载对应的插件包,放到系统GOPATH/src下,并建立对应的目录结构,执行go install。
go install github.com/nsf/gocode
最新使用:go install github.com/mdempsky/gocode
go install github.com/rogpeppe/godef
go install github.com/zmb3/gogetdoc
go install github.com/golang/lint/golint
go install github.com/lukehoban/go-outline
go install sourcegraph.com/sqs/goreturns
go install golang.org/x/tools/cmd/gorename
go install github.com/tpng/gopkgs
go install github.com/newhook/go-symbols
go install github.com/cweill/gotests/...
go install golang.org/x/tools/cmd/guru
//如果需要在vscode中调试go程序,需要下载安装dlv
go install github.com/derekparker/delve/cmd/dlv
至此属于go的vscode环境设置完成。
引入GOMOD的支持
go.mod指定的依赖,将会下载到GOPATH下的pkg文件中。
但是,并不会被vscode自动识别。
vscode识别的本质是.a文件,去项目空间的pkg文件中会发现,非gomod的项目编译后会产生.a文件,这是提示的根源。
所以方式为:手动生成.a文件即可,可以包一个脚本去手动跑一下生成.a文件,再回到vscode中发现就能识别了。
# 参考样例shell
#!/bin/bash
set -e
cd $GOPATH/../order2 # 前往自己的项目空间
DIR=`pwd` # 记录下项目空间path地址
pkgDir=$DIR/pkg/darwin_amd64/order # 记录项目空间的pkg地址,后面用于生成.a文件是指定输出目录从这里开始
echo $DIR
cd src/order # 进入到src下的代码包
go build -o $pkgDir/handlers/config.a ./handlers/config # 将handlers包下的config子包生成config.a文件放入到pkg下的handlers包下
最新机制:使用官方的语言服务器gopls
VS Code 的设置, 搜索 go.useLanguageServe, 并勾选上。
此后不需要做任何设置,自动提示和跳转(使用了编译标签时不支持)都是ok的。
gomod机制下的包安装:进到go.mod所在的目录,执行go mod tidy。