官方Go SDK
目前,官方Go SDK中提供的工具是使用的最广泛的Go开发工具。《Go语言101》所有中所有的实例代码都使用标准编译器编译验证过。
本文将介绍如何配置Go开发环境和如何使用Go SDK中的go
命令运行简单的Go程序。各种go
子命令也将获得简单的介绍。
安装Go SDK
请从国际官网或者国内官网下载Go SDK,并按照下载页面中的说明安装Go SDK。
Go SDK的版本和其所支持的最高Go语言版本是一致的。比如,Go SDK 1.13.x支持从1.0到1.13的所有Go语言版本。
为了从任意目录运行Go SDK中工具命令(主要各种go
子命令),Go SDK安装目录下的bin
子目录路径必须配置在PATH
环境变量中。
一些老的Go SDK版本可能需要配置GOROOT
和GOPATH
环境变量。当前最新的Go SDK版本对这些没有做强制要求。GOPATH
环境变量的默认值为当前用户的HOME目录下的名为go
文件夹对应的目录。GOPATH
环境变量中可以指定多个目录。
GOBIN
环境变量用来指定某些go
子命令(比如go install
,见下)产生的二进制可执行文件应该存储在何处。如果此环境变量未指定,go
命令将使用GOPATH
环境变量中指定的第一个路径下的bin
子目录路径来存储这些可执行文件。此目录的路径需配置在PATH
环境变量中,以便从任意目录运行这些可执行文件。
在Go SDK 1.11版本之前,go
命令推荐所有的Go代码都放在GOPATH
环境变量中指定的任一个路径下的src
子目录中,尤其是依赖于其它第三方代码库包的Go项目代码。代码库包将在后面的代码包和包引入一文中详述。
Go SDK 1.11引入了一个试验性的特性:Go模块(Go modules)。此特性让我们得以自由地将我们的Go项目代码放置在任何目录下。我们可以从此官方维基页面得到更多关于Go模块的信息。
注意,从Go SDK 1.13开始,Go模块模式将成为Go项目开发中的推荐模式。旧的GOPATH
模式将不再推荐。GOPATH
环境变量的意义和必要性将大大减弱,甚至逐渐消失。另一方面,GOBIN
环境变量的重要性将提升,因为我们仍需要一个目录路径用来存储某些go
子命令产生的二进制可执行文件。
最简单的Go程序
让我们写一个简单的Go程序,并且学习如何运行之。 下面的程序应该是最简单的Go程序。
package main
func main() {
}
在此程序中,单词package
和func
是两个关键字。两个main
是两个标识符。标识符和关键字将在后续的一篇文章中讲解。
此程序的第一行指定了当前源代码文件所处的包的包名(此处为main
)。第二行是一个空行,用来增强可读性。第三和第四行声明了一个名为main
的函数。此函数为程序的入口函数。
运行一个Go程序
Go SDK工具要求所有的Go源代码文件必须以.go
后缀结尾。这里,我们假设上面展示的最简单的Go程序存放在一个名叫simplest-go-program.go
的文件中。
打开一个终端(控制台)并进入上述源文件所在的目录,然后运行
$ go run simplest-go-program.go
什么也没输出?是的,此程序不做什么有实质意义的事儿。
如果代码中有语法错误,这些错误将输出在终端中。
如果一个程序的main
包中有若干Go源代码,我们也可以使用下面的命令运行此程序。
$ go run .
注意:go run
子命令并不推荐在正式的大项目中使用。go run
子命令只是一种方便的方式来运行简单的Go程序。对于正式的项目,最好使用go build
或者go install
子命令来编译生成可执行程序文件。
更多go子命令
上面提到的三个go
子命令(go run
、go build
和go install
)将只会输出代码语法错误。它们不会输出可能的代码逻辑错误(即警告)。go vet
子命令可以用来检查可能的代码逻辑错误。
我们可以使用go fmt
子命令来用同一种代码风格格式化Go代码。
我们可以使用go get
子命令将一个远程Go代码库拉取到本地以便将其做为第三方Go包引入并使用其中的资源。go get
子命令需要首先安装相应的代码版本管理工具。
我们可以使用go test
子命令来运行单元和基准测试用例。
我们可以使用go doc
子命令来查看Go代码库包的文档。
从Go SDK 1.11版本开始,我们可以运行go mod
子命令来管理包依赖。
我们可以运行go help aSubCommand
来查看一个子命令aSubCommand
的帮助信息。
运行不带参数的go
命令将会列出所有支持的go
子命令。
《Go语言101》系列文章将不再对各种go
子命令做更多的解释。请阅读官方文档(墙外版)以获取更多信息。
查看Go文档
我们可以在Go官网golang.org(墙内版)阅读Go官方文档。
我们也可以运行godoc -http=:9999
开启一个官网的一个本地镜像来阅读Go官方文档。
请注意:
- 从Go SDK 1.13开始,此
godoc
命令已经从不再集成在Go SDK中,而需要另外下载(go get golang.org/x/tools/cmd/godoc
)。 - 对于1.10版本的Go SDK,如果
GOROOT
环境变量没有设置,那么我们需要在开启本地镜像的时候指定一个goroot
选项:godoc -http=:9999 -goroot path/to/go/sdk
。这个不便可能是godoc
的一个bug造成的。这个bug已经在Go SDK 1.11中修复了。 - 从Go SDK 1.12开始,教程《A Tour of Go》不再打包在Go SDK中,而必须通过运行
go get golang.org/x/tour
来单独安装,并运行tour
来开启一个本地服务进行阅读。 另注意:当前(Go SDK 1.13),godoc
命令不支持不处于GOPATH
下的代码包。
godoc
程序启动时默认将会为所有本地已经下载的Go第三方库包生成文档。有时这可能需要很长的时间。如果你只想查看标准库的文档,你可以在godoc
命令运行之前在终端中将GOPATH
环境变量暂时设为一个不存在的路径,比如,在Linux系统中,可以运行GOPATH=nonexist godoc -http=:9999
。
Go语言101项目目前同时托管在Github和Gitlab上。欢迎各位在这两个项目中通过提交bug和PR的方式来改进完善Go语言101中的各篇文章。
本书微信公众号名称为"Go 101"。每个工作日此公众号将尽量发表一篇和Go语言相关的原创短文。各位如果感兴趣,可以搜索关注一下。