目前,Go官方工具链中提供的工具是使用得最广泛的Go开发工具。 《Go语言101》所有中所有的实例代码都使用Go官方工具链中提供的标准编译器编译验证过。
本文将介绍如何配置Go开发环境和如何使用Go官方工具链中提供的go
命令。
一些非官方工具链中的工具也将简单提及。
请从国际官网或者国内官网下载Go官方工具链, 并按照下载页面中的说明安装Go官方工具链。
我们也可以使用工具GoTV来安装多个Go官方工具链版本,并方便和谐地使用它们。
Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方工具链1.23.x版本支持从1.0到1.23的所有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程序。package main
func main() {
}
在此程序中,单词package
和func
是两个关键字。
两个main
是两个标识符。
标识符和关键字将在后续的一篇文章中讲解。
此程序的第一行指定了当前源代码文件所处的包的包名(此处为main
)。
第二行是一个空行,用来增强可读性。
第三和第四行声明了一个名为main
的函数。
此函数为程序的入口函数。
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.mod
文件。此文件可以使用go mod init
子命令来生成(见下)。
_
和.
开头的源代码文件将被Go官方工具链工具忽略掉。
go
子命令
上面提到的三个go
子命令(go run
、go build
和go install
)
将只会输出代码语法错误。它们不会输出可能的代码逻辑错误(即警告)。
go vet
子命令可以用来检查可能的代码逻辑错误(即警告)。
我们可以(并且应该常常)使用go fmt
子命令来用同一种代码风格格式化Go代码。
我们可以使用go test
子命令来运行单元和基准测试用例。
我们可以使用go doc
子命令来(在终端中)查看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程序的最新版本(至GOBIN
目录)。
在Go官方工具链1.16版本之前,对应的命令是go get -u example.com/program
(现在已经被废弃而不再推荐被使用了)。
我们可以运行go help aSubCommand
来查看一个子命令aSubCommand
的帮助信息。
运行不带参数的go
命令将会列出所有支持的go
子命令。
我们可以使用Go项目文档和代码阅读工具Golds(go101.org/golds
,由本书作者老貘开发)来阅读代码库文档。
此工具将列出类型的实现关系,并且支持良好的代码阅读体验。
安装Golds完成之后,我们可以运行golds std ./...
来阅读Go标准库和当前文件夹下的所有库包的文档。
Go101.org网站内容包括Go编程各种相关知识(比如Go基础、Go优化、Go细节、Go实战、Go测验、Go工具等)。后续将不断有新的内容加入。敬请收藏关注期待。
本丛书微信公众号(联系方式一)名称为"Go 101"。二维码在网站首页。此公众号将时不时地发表一些Go语言相关的原创短文。各位如果感兴趣,可以搜索关注一下。
《Go语言101》系列丛书项目目前托管在Github上(联系方式二)。欢迎各位在此项目中通过提交bug和PR的方式来改进完善《Go语言101》丛书中的各篇文章。我们可以在项目目录下运行go run .
来浏览和确认各种改动。
本书的twitter帐号为@Golang_101(联系方式三)。玩推的Go友可以适当关注。
你或许对本书作者老貘开发的一些App感兴趣。
sync
标准库包sync/atomic
标准库包