学习一门编程语言除了学习它的语法,也要搭建一个正确好用的开发环境,这篇文章分享一下个人Golang开发环境。git
在MacOS下我通常都是用Homebrew:github
❯ brew update
❯ brew install golang
❯ go version # 安装完成了
go version go1.12.6 darwin/amd64
复制代码
安装以后要作一点环境变量配置。golang
GOPATH环境变量表示Go的工做目录,这个目录指定了须要从哪一个地方寻找GO的包、可执行程序等。用go get
下载的包都放在这个目录下。macos
从Go 1.8开始,GOPATH默认是$HOME/go,若是你但愿使用其余目录能够在你用的Shell配置文件(如~/.zshrc、~/.bashrc、.bash_profile)里面指定,我推荐显示的指定GOPATH,哪怕用了默认的目录。编程
GOROOT指Go语言编译、工具、标准库等的安装路径。json
从Go 1.0开始,也没必要显示地设置GOROOT环境变量。一般这个路径是/usr/local/go
,当使用Homebrew安装Golang时目录会放在"$(brew --prefix golang)/libexec"这个目录下。浏览器
个人.zshrc
里面是这样配置的:bash
export GOPATH="${HOME}/.go" # 个人我的习惯
export GOROOT="$(brew --prefix golang)/libexec" # 默认路径
export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"
复制代码
如今有很是多成熟的集成开发环境(IDE),如Emacs、GoLand、VS Code、Vim、LiteIDE等。它们都是跨平台的,支持代码语法高亮、自动补全、错误检查、代码引用查询与跳转、格式化和调试等特性,能够做为Golang程序开发工具。微信
其实选择哪一个IDE没有标准答案,看你的习惯和喜爱,若是你愿意花时间去深刻和琢磨一套属于本身的用法和快捷键,上面提到的任何一个 IDE 均可以帮助你完成开发。oracle
我平常用的编辑器是VS Code,因此开发环境都是基于VS Code搞的。
从官网下载对应平台安装文件安装就能够了。
接着安装官方扩展Go for Visual Studio Code,浏览器访问后直接点击install
按钮便可自动打开VS Code安装之。
接着须要安装一些必要的包。
若是你在VS Code(下文简称Code)里面打开(新建)一个go程序文件,右下角会有相似这样的提示:
The "go-outline" command is not available. Use "go get -v github.com/ramya-rao-a/go-outline" to install.`
复制代码
而后是2个按钮Install
和Install All
,由于这样的相关包还不少,一般能够直接选择Install All
,可是因为某些包被不明缘由限制访问,最后会超时失败,错误信息差很少是这样的:
Installing 1 tool at /Users/xiaoxi/bin
go-outline
Installing github.com/mdempsky/gocode FAILED
Installing github.com/ramya-rao-a/go-outline FAILED
1 tools failed to install.
go-outline:
Error: Command failed: /Users/xiaoxi/opt/go/libexec/bin/go get -u -v github.com/ramya-rao-a/go-outline
github.com/ramya-rao-a/go-outline (download)
Fetching https://golang.org/x/tools/go/buildutil?go-get=1
https fetch failed: Get https://golang.org/x/tools/go/buildutil?go-get=1: dial tcp 216.239.37.1:443: i/o timeout
golang.org/x/tools (download)
# cd /Users/xiaoxi/src/golang.org/x/tools; git pull --ff-only
fatal: unable to access 'https://go.googlesource.com/tools/': Failed to connect to go.googlesource.com port 443: Operation timed out
package golang.org/x/tools/go/buildutil: exit status 1
...
复制代码
这时候须要在Code里面设置代理(Proxy),为了让你们知道都安装了那些包,另外我通常喜欢在命令行下执行,因此在终端能够这样安装:
export http_proxy=http://10.8.0.1:8118;export https_proxy=http://10.8.0.1:8118; # 设置代理,这里你能够替换成你本身的代理
go get -u -v github.com/mdempsky/gocode
go get -u -v github.com/rogpeppe/godef
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/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/golangci/golangci-lint/cmd/golangci-lint
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/zmb3/gogetdoc
go get -u -v github.com/fatih/gomodifytags
go get -u -v github.com/cweill/gotests/...
go get -u -v github.com/josharian/impl
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
复制代码
一眼看去好多包啊。我来分别介绍一下它们是用来作什么的:
更多信息能够看延伸阅读连接1。注意有些包我没有安装,如golint、gometalinter、goreturns等,由于在对应场景下使用了其余包,就不必装了(你们不要直接粘贴我或者其余开发者安装的包列表,有本身的思考选择性的安装)
另外这些包其实不止针对于Code,对于其余编辑器也是适用的,你能够根据包名搜索有没有对应编辑器的扩展或者插件,大部分均可以集成进去。
安装以后须要对Code作一些设置。首先使用快捷键Command+,
打开设置页面(用IDE必定要学好快捷键),搜索Go configuration
就能够看到Golang语言相关设置项了。不一样的设置项类型不一样:有下拉菜单、单选框、Input框,设置须要直接编辑配置文件settings.json。
Code给每一项都设置了默认值,settings.json文件里面的设置会覆盖默认的,你能够直接编辑settings.json文件,也能够在设置页面对设置项作选择(如打勾、从下拉菜单选择你要的选项、在输入框输入对应值等)。我通常直接修改settings.json文件,这样换一台电脑这些配置项能够直接拷贝过去就可用了。下面是个人设置项,都带了说明:
{{< highlight json >}} { "go.docsTool": "gogetdoc", // 使用gogetdoc获取方法和类的签名帮助信息 "workbench.colorTheme": "Dracula", // 换成我喜欢的主题 "go.formatTool": "goimports", // 指定代码格式化工具,其余的如gofmt goreturns goformat "go.autocompleteUnimportedPackages": true, // 未完成的包会自动补全 "go.inferGopath": true, // 让编辑器自动推断 GOPATH(包含全局的GOPATH,并沿着当前文件向上找到src目录) "go.useCodeSnippetsOnFunctionSuggest": true, // 使用代码片断提示,一会会继续说Snippets "go.useCodeSnippetsOnFunctionSuggestWithoutType": true, "go.lintTool": "golangci-lint", // 代码静态检查工具,其余的如gometalinter golint revive staticcheck "go.gotoSymbol.includeGoroot": true, // 在工做空间进行符号搜索文件时(Shift+cOMMAND+O, #开头)包含位于GOROOT里面的标准库 }
PS: 在MacOS下配置文件的路径是`$HOME/Library/Application Support/Code/User/settings.json`。
有一点要说明,我以前也在网上看过别人的配置,发现不少项的键值其实如今都已经再也不可用了。怎么知道可用选项、设置说明、可选项等信息呢?
答案是: 看官方vscode-go项目下的package.json文件(延伸阅读连接3),都在那里面。举个`go.formatTool`的例子:
{{< highlight json >}}
...
"go.formatTool": {
"type": "string",
"default": "goreturns",
"description": "Pick 'gofmt', 'goimports', 'goreturns' or 'goformat' to run on format. Not applicable when using the language server. Choosing 'goimport' or 'goreturns' will add missing imports and remove unused imports.",
"scope": "resource",
"enum": [
"gofmt",
"goimports",
"goreturns",
"goformat"
]
},
...
复制代码
直接在文件里面搜很方便,特别适合我这种喜欢在终端打开文件的开发者。
Code中添加Snippet能够提升写代码的效率,就是用别人写好的代码片断实现一些功能。在前面装的官方扩展「Go for Visual Studio Code」里面就带了不少代码片断。举个例子,若是想写一个for range
语句,你只须要在编辑文件是打入forr
,而后按Tab,就会出现这样的一段代码:
for _, var := range var {
}
复制代码
而且把游标定位到循环里面,很是方便。所有的代码片断能够看延伸阅读连接5
另外Code市场有专门的Go Snippets插件,里面也有不少片断。
固然能够自定义代码片断,能够把你平常经常使用的一些代码作成代码片断,首先使用Shift + Command + P
调出命令窗口,输入「snippets」,选择 「Preferences: Open User Snippets」,而后选择须要添加Snippet的语言(对咱们来讲就是选 go.json),go.json默认是一个包含详细注释的例子,按它的格式写就能够。我这里举个例子:
{
"println":{
"prefix": "pln",
"body":"fmt.Println($0)",
"description": "Snippet for Println"
},
"printf":{
"prefix": "plf",
"body": "fmt.Printf(\"$0\")",
"description": "Snippet for Printf"
}
}
复制代码
这样写代码时用pln
再按Tab就能打出对应的fmt.Println
。固然这只是举个栗子,这种经常使用的代码在vscode-go项目中都有(分别是fp
和ff
)
PS: 使用Snippets最重要的是要记住各类缩写前缀(如前面的forr、pln),写起来代码来飞快~
原文地址: strconv.com/posts/setup…
好啦,就先说到这里,之后有其余的设置和用法我再更新~
请关注微信公众号『Golang之美』