目前,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
子命令。