目前,官方 Go 工具链(后文简称 "Go 工具链")中的工具是开发 Go 项目时最常用的工具。在《Go 101》系列文章中,所有示例均通过 Go 工具链提供的标准 Go 编译器进行编译和验证。
本文将介绍如何搭建 Go 开发环境,以及如何使用 Go 工具链中提供的go
命令。此外,还将介绍一些 Go 工具链之外的其他工具。
安装Go工具链
请下载 Go 工具链,并按照下载页面上的说明进行安装。
我们也可以使用 GoTV 工具来管理多个个 Go 工具链版本的安装,以便和谐且便捷地使用它们。
Go 工具链某一版本的版本号与其所支持的最高 Go 语言版本一致。例如,Go 工具链 1.25.x 版本支持从 1.0 到 Go 1.25 的所有 Go 语言版本。
要在不输入完整路径的情况下执行 Go 工具链中提供的工具(通过go
命令),必须将 Go 工具链安装根目录下bin
子文件夹的路径添加到PATH
环境变量中。如果你的 Go 工具链是通过安装程序或包管理器安装的,bin
子文件夹的路径可能已自动添加到PATH
环境变量中。
近期的 Go 工具链版本支持一项名为 "模块(modules)" 的特性,用于管理项目依赖。该特性在 1.11 版本中以实验性方式引入,自 1.16 版本起成为默认启用项。
有一个名为GOPATH
的环境变量需要我们了解,不过无需过多关注。其默认值为当前用户主目录下go
文件夹的路径。若手动指定,GOPATH
环境变量可包含多个路径。后文提及 "GOPATH
文件夹" 时,均指GOPATH
环境变量中第一个路径对应的文件夹。
-
GOPATH
文件夹下的pkg
子文件夹用于存储本地 Go 项目所依赖的 Go 模块(一个 Go 模块是一组 Go 包的集合)的缓存版本。 -
存在一个
GOBIN
环境变量,它控制go install
子命令生成的 Go 程序二进制文件的存储位置。GOBIN
环境变量的默认值为GOPATH
文件夹下bin
子文件夹的路径。如果希望不指定完整路径就能运行生成的 Go 程序二进制文件,应将GOBIN
路径添加到PATH
环境变量中。
一个简单的Go程序
让我们编写一个简单的示例,学习如何运行简单的 Go 程序。
下面是一个最简单的 Go 程序。
go
package main
func main() {
}
package
和func
这两个词是关键字。main
这两个词是标识符。关键字和标识符将在后续文章中介绍。
第一行package main
指定了包含该源代码文件的包名(此处为main
)。
第二行是空白行,用于提升可读性。
其余代码声明了一个同样名为main
的函数。main
包中的这个main
函数指定了程序的入口点(注意:在main
函数被调用之前,可能会执行一些其他用户代码)。
运行Go程序
Go 工具链要求 Go 源代码文件的扩展名为.go
。在此,我们假设上述源代码保存于一个名为simplest-go-program.go
的文件中。
打开终端,将当前目录切换到包含上述源文件的目录,然后运行
go
$ go run simplest-go-program.go
没有任何输出?没错,这个程序本身就不会输出内容。
如果源代码中存在语法错误,这些错误会作为编译错误被上报。
若一个程序的main
包中包含多个源文件,则需通过以下命令运行该程序:
arduino
$ go run .
请注意,
- 不建议使用
go run
命令编译和运行大型 Go 项目。它仅作为运行简单 Go 程序(如《Go 101》文章中的示例程序)的便捷方式。对于大型 Go 项目,请使用go build
或go install
命令先构建出可执行二进制文件,再运行该文件。 - 每个支持 Go 模块的正式 Go 项目,其根目录下都需有一个
go.mod
文件。该文件可通过go mod init
子命令生成(见下文)。 - 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.mod
文件,也可以通过go
子命令让其自动更新。 -
go mod tidy
命令通过分析当前项目的所有源代码,向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 子命令
查看指定子命令的帮助信息。
直接运行go
命令(不带任何参数)可显示所有支持的子命令。
《Go 101》系列文章不会过多讲解 Go 工具链中工具的使用方法,详情请查阅官方文档。
在浏览器中查看 Go 包文档
我们可以使用文档和源代码查看工具 Golds(网址:go101.org/golds)在本地查看指定 Go 项目的文档。这并非官方工具,而是由我(Tapir Liu)开发的。Golds 支持丰富的代码阅读体验(例如列出类型实现关系)。安装 Golds 后,我们可以运行golds std ./...
命令来查看标准包和当前文件夹中包的文档。
关于官方的 Go 文档,请访问 go.dev。