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

godoc 启动本地网站

图 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 包。

具体来看,这些包可能的类型如下:

状态缩写状态含义
+locall本地包,即项目自身的包组织
+externale外部包,即被 $GOPATH 管理,但不在 vendor 目录下
+vendorv已被 govendor 管理,即在 vendor 目录下
+stds标准库中的包
+unusedu未使用的包,即包在 vendor 目录下,但项目并没有用到
+missingm代码引用了依赖包,但该包并没有找到
+programp主程序包,意味着可以编译为执行文件
+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