第3章:Go官方工具链
Go官方工具链
目前,Go官方工具链中提供的工具是使用得最广泛的Go开发工具。 《Go语言101》所有中所有的实例代码都使用Go官方工具链中提供的标准编译器编译验证过。
本文将介绍如何配置Go开发环境和如何使用Go官方工具链中提供的go
命令。 一些非官方工具链中的工具也将简单提及。
安装Go官方工具链
请从国际官网或者国内官网下载Go官方工具链, 并按照下载页面中的说明安装Go官方工具链。
Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方工具链1.19.x版本支持从1.0到1.19的所有Go语言版本。
为了从任意目录运行Go官方工具链中工具命令(通过go
命令), Go官方工具链安装目录下的bin
子目录路径必须配置在PATH
环境变量中。 当使用安装程序安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。
Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认支持。
我们应该了解一个环境变量:GOPATH
。 此环境变量的默认值为当前用户的HOME目录下的名为go
文件夹对应的目录路径。 GOPATH
环境变量可以被手动地配置多个路径。 以后,当GOPATH
文件夹被提及的时候,它表示GOPATH
环境变量中的第一个路径对应的文件夹。
GOPATH
文件夹中的pkg
子文件夹用来缓存被本地项目所依赖的Go模块(一个Go模块为若干Go库包的集合)的版本。GOBIN
环境变量用来指定go install
子命令产生的Go应用程序二进制可执行文件应该存储在何处。 它的默认值为GOPATH
文件夹中的bin
子目录所对应的目录路径。GOBIN
路径需配置在PATH
环境变量中,以便从任意目录运行这些Go应用程序。
最简单的Go程序
让我们写一个简单的Go程序,并且学习如何运行之。
下面的程序应该是最简单的Go程序。
package main
func main() {
}
在此程序中,单词package
和func
是两个关键字。 两个main
是两个标识符。 标识符和关键字将在后续的一篇文章中讲解。
此程序的第一行指定了当前源代码文件所处的包的包名(此处为main
)。 第二行是一个空行,用来增强可读性。 第三和第四行声明了一个名为main
的函数。 此函数为程序的入口函数。
运行一个Go程序
Go官方工具链工具要求所有的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项目的根目录下需要一个
go.mod
文件。此文件可以使用go mod init
子命令来生成(见下)。 - 名称以
_
和.
开头的源代码文件将被Go官方工具链工具忽略掉。
更多go
子命令
上面提到的三个go
子命令(go run
、go build
和go install
) 将只会输出代码语法错误。它们不会输出可能的代码逻辑错误(即警告)。 go vet
子命令可以用来检查可能的代码逻辑错误(即警告)。
我们可以(并且应该常常)使用go fmt
子命令来用同一种代码风格格式化Go代码。
我们可以使用go test
子命令来运行单元和基准测试用例。
我们可以使用go doc
子命令来(在终端中)查看Go代码库包的文档。
强烈推荐让你的Go项目支持Go模块特性来简化依赖管理。对一个支持Go模块特性的项目:
go mod init example.com/myproject
命令可以用来在当前目录中生成一个go.mod
文件。 当前目录将被视为一个名为example.com/myproject
的模块(即当前项目)的根目录。 此go.mod
文件将被用来记录当前项目需要的依赖模块和版本信息。 我们可以手动编辑或者使用go
子命令来修改此文件。go mod tidy
命令用来通过扫描当前项目中的所有代码来添加未被记录的依赖至go.mod
文件或从go.mod
文件中删除不再被使用的依赖。go get
命令用拉添加、升级、降级或者删除单个依赖。此命令不如go mod tidy
命令常用。
从Go官方工具链1.16版本开始,我们可以运行go install example.com/program@latest
来安装一个第三方Go程序的最新版本(至GOBIIN
目录)。 在Go官方工具链1.16版本之前,对应的命令是go get -u example.com/program
(现在已经被废弃而不再推荐被使用了)。
我们可以运行go help aSubCommand
来查看一个子命令aSubCommand
的帮助信息。
运行不带参数的go
命令将会列出所有支持的go
子命令。
《Go语言101》系列文章将不再对各种go
子命令做更多的解释。 请阅读官方文档 (墙外版)以获取更多信息。
查看Go文档
我们可以使用Go项目文档和代码阅读工具Golds(go101.org/golds
,由本书作者老貘开发)来阅读代码库文档。 此工具将列出类型的实现关系,并且支持良好的代码阅读体验。 安装Golds完成之后,我们可以运行golds std ./...
来阅读Go标准库和当前文件夹下的所有库包的文档。
本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和Go101.org网站不断增容和维护的动力。
(请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101获取本书最新版)