Golang 是一门年轻的语言。它在设计上借鉴了传统 C 语言的高性能特性,又借鉴了多种现代系统语言的优点,被认为具有很大的潜力。要开发好 Golang,首先要掌握好相关的开发工具。
这里介绍如何快速安装和配置 Golang 环境、选用合适的编辑器和 IDE,以及如何配合使用 Golang 的配套开发工具来提高开发效率。
安装与配置 Golang 环境
Golang 环境安装十分简单,可以通过包管理器或自行下载方式进行,为了使用最新版本的 Golang 环境,推荐大家通过下载环境包方式进行安装。
首先,从 https://golang.org/dl/ 页面查看最新的软件包,并根据自己的平台进行下载,例如 Linux 环境下,目前最新的环境包为 https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz。
/usr/local/go
$ sudo tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz
/usr/local/go
- api:Go API 检查器的辅助文件,记录了各个版本的 API 特性。
- bin:Go 语言相关的工具的二进制命令。
- doc:存放文档。
- lib:一些第三方库。
- misc:编辑器和开发环境的支持插件。
- pkg:存放不同平台的标准库的归档文件(.a 文件)。
- src:所有实现的源码。
- test:存放测试文件。
$GOPATH
$HOME/.bashrc
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/Go
export GOROOT=/usr/local/go
其它更多平台下安装,可以参考 https://golang.org/doc/install。
编辑器与 IDE
使用传统编辑器如 VIM,可以安装相应的 Golang 支持插件,如 vim-go。
目前支持 Go 语言的 IDE(Integrated Development Environment) 还不是特别丰富。推荐使用 Jet Brains 出品的 Pycharm 或 Gogland。
Pycharm 本来是面向 Python 语言的 IDE 产品,但可以通过安装 Go 语言插件来支持 Go 语言。
Gogland 是专门针对 Go 语言设计的 IDE,在代码的补全、分析等方面性能更优越。可以从 https://www.jetbrains.com/go/ 下载获取。
高效开发工具
Go 语言自带了不少高效的工具和命令,使用好这些工具和命令,可以很方便地进行程序的维护、编译和调试。
go doc 和 godoc
go doc 可以快速显示指定软件包的帮助文档。
godoc 是一个类似的命令,功能更强大,它以 web 服务的形式提供文档,即允许用户通过浏览器查看软件包的文档。
可以通过如下命令进行快速安装。
$ go get golang.org/x/tools/cmd/godoc
godoc 命令使用格式如下。
$ godoc package [name ...]
比较有用的命令行参数包括:
-http=:PORT:6060-index-play
例如,下面的命令将在本地快速启动一个类似 https://golang.org/ 的网站,包括本地软件包的文档和 playground 等。
$ godoc -http=:6060 -index -play
图 1.17.3.3.1 - godoc 启动本地网站
go build
编译软件包,例如编辑当前软件包内容。
$ go build .
支持如下参数:
-x-gcflags-ldflags
go clean
清理项目,删除编译生成的二进制文件和临时文件。使用格式如下
$ go clean
支持如下参数:
-i-n-r-x
go env
打印与 go 相关的环境变量,命令使用格式如下。
$ go env [var ...]
例如,通过如下命令查看所有跟 go 相关的环境变量。
$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/opt/Go"
GORACE=""
GOROOT="/usr/local/go/1.8.3/libexec"
GOTOOLDIR="/usr/local/go/1.8.3/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/d8/3h28zg552853gpp7ymrxl2r80000gn/T/go-build128111214=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
go fmt 和 gofmt
两者都是对代码进行格式化检查和修正。
gofmt -l -w
gofmt 命令的使用格式如下。
$ gofmt [flags] [path ...]
支持如下参数:
-d-e-l-r-s-w
go get
快速获取某个软件包并执行编译和安装,例如
$ go get github.com/hyperledger/fabric
支持如下参数:
-u-d
go install
对本地软件包执行编译,并将编译好的二进制文件安装到 $GOPATH/bin。
go build
go list
列出本地包中的所有的导入依赖。
命令格式为
$ go list [-e] [-f format] [-json] [build flags] [packages]
其中,-e 可以指定忽略出错的包。
go run
编译并直接运行某个主程序包。
go run
go test
*_test.go
$ go test ./...
支持如下参数:
-v
golint
对代码进行格式风格检查,打印出不符合 Go 语言推荐风格的代码。
安装该工具十分简单,通过如下命令即可快速安装。
$ go get -u github.com/golang/lint/golint
使用时,指定软件包路径即可,如对超级账本 Fabric 项目所有代码进行风格检查。
$ golint $GOPATH/src/github.com/hyperledger/fabric/...
...
goimports
也是代码风格检查工具,重点在于对 imports 相关格式进行检查,比较强大的是能自动修正。
安装该工具十分简单,通过如下命令即可快速安装。
$ go get golang.org/x/tools/cmd/goimports
使用时,也是指定软件包路径即可。
另外,goimports 支持几个很有用的参数。
-d-e-l-w-srcdir
go tool
go tool
其中,比较常用的包括 vet 和 fix。
vet 对代码的准确性进行基本检查,如函数调用参数缺失、不可达代码,或调用格式不匹配等。
使用也十分简单,指定要检查的软件包路径即可。
fix 则可以对自动对旧版本的代码进行升级修复,替换为使用新版本的特性。
go tool cmd -h
govendor 工具
$GOPATH
Golang 自 1.5 版本开始重视第三方依赖的管理,将项目依赖的外部包统一放到 vendor 目录下(类比 Nodejs 的 node_modules 目录),并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。
Daniel Theophanes 等人开发了 govendor 工具,方便对第三方依赖进行管理。
govendor 的安装十分简单,可以通过 go get 命令:
$ go get -u -v github.com/kardianos/govendor
对于 govendor 来说,主要存在三种位置的包:项目自身的包组织为本地(local)包;传统的存放在 $GOPATH 下的依赖包为外部(external)依赖包;被 govendor 管理的放在 vendor 目录下的依赖包则为 vendor 包。
具体来看,这些包可能的类型如下:
状态 | 缩写状态 | 含义 |
---|---|---|
+local | l | 本地包,即项目自身的包组织 |
+external | e | 外部包,即被 $GOPATH 管理,但不在 vendor 目录下 |
+vendor | v | 已被 govendor 管理,即在 vendor 目录下 |
+std | s | 标准库中的包 |
+unused | u | 未使用的包,即包在 vendor 目录下,但项目并没有用到 |
+missing | m | 代码引用了依赖包,但该包并没有找到 |
+program | p | 主程序包,意味着可以编译为执行文件 |
+outside | 外部包和缺失的包 | |
+all | 所有的包 |
govendor COMMAND
通过指定包类型,可以过滤仅对指定包进行操作。
initlistaddadd PKG_PATHupdateremovestatusfetchsyncgetgo get
dep 工具
为了方便管理依赖,Golang 团队 2016 年 4 月开始开发了 dep 工具,试图进一步简化在 Golang 项目中对第三方依赖的管理。该工具目前已经被试验性支持,相信很快会成为官方支持的工具。
dep 目前需要 Golang 1.7+ 版本,兼容其他依赖管理工具如 glide、godep、vndr、govend、gb、gvt、govendor、glock 等。
类似于 govendor 工具,dep 将依赖都放在本地的 vendor 目录下,通过 Gopkg.toml 和 Gopkg.lock 文件来追踪依赖的状态。
- Gopkg.toml 文件:手动编写或通过 dep init 命令生成。描述了项目对第三库的依赖规则,例如允许的版本范围等。用户可以通过编辑该文件表达预期的依赖控制目标。
- Gopkg.lock 文件:通过 dep init 或 dep ensure 命令自动生成。根据项目代码和 Gopkg.toml 文件,计算出一个符合要求的具体的依赖关系并锁定,其中包括每个第三方库的具体版本。vendor 目录下的依赖库需要匹配这些版本。
安装可以通过 go get 命令:
$ go get -v -u github.com/golang/dep/cmd/dep
dep 使用保持简洁的原则,包括四个子命令。
- init:对一个新的 Go 项目,初始化依赖管理,生成配置文件和 vendor 目录等;
- status:查看当前项目依赖的状态,包括依赖包名称、限制范围、指定版本等。可以通过 -old 参数来只显示过期的依赖;
- ensure:更新依赖,确保满足指定的版本条件。如果本地缺乏某个依赖,会自动安装;
- version:显示 dep 工具的版本信息。
其中,ensure 命令最为常用,支持的子命令参数主要包括:
- -add:添加新的依赖,如 dep ensure -add github.com/pkg/foo@^1.0.0;
- -dry-run:模拟执行,打印参考改动但不实施;
- -no-vendor:根据计算结果更新 Gopkg.lock 文件,但不更新 vendor 中依赖包;
- -update:更新 Gopkg.lock 中的依赖到 Gopkg.toml 中允许的最新版本,默认同时更新 vendor 包中内容;
- -v:输出调试信息方面了解执行过程;
- -vendor-only:按照 Gopkg.lock 中条件更新 vendor 包中内容。
该文章版权属于跨链技术践行者
摘录自:https://blockchain-fans.blog.csdn.net/article/details/90298702