第02章 - 环境搭建与工具链
本章将带你完成 Go 开发环境的搭建,理解 Go 的工具链、目录结构与环境变量,并编写运行你的第一个 Go 程序。
2.1 安装 Go
2.1.1 下载安装包
Go 的官方下载地址为 https://go.dev/dl/。官方为主流操作系统提供了预编译安装包:
- Windows:
.msi安装程序,双击安装即可。 - macOS:
.pkg安装程序,或使用 Homebrew 安装。 - Linux:
.tar.gz压缩包,解压到/usr/local。
2.1.2 Linux 下安装示例
# 下载(以 1.22.0 为例,请替换为最新版本)
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
# 删除旧版本并解压到 /usr/local
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
# 配置 PATH(写入 ~/.bashrc 或 ~/.profile)
export PATH=$PATH:/usr/local/go/bin
2.1.3 macOS 下使用 Homebrew
brew install go
2.1.4 验证安装
安装完成后,打开终端执行:
go version
若输出类似 go version go1.22.0 linux/amd64 的信息,则说明安装成功。
2.2 环境变量详解
Go 的行为由若干环境变量控制,可通过 go env 命令查看全部配置:
go env
常用的核心环境变量包括:
| 变量 | 含义 |
|---|---|
GOROOT |
Go 安装目录,一般无需手动设置,安装包会自动配置 |
GOPATH |
工作区目录,默认是 $HOME/go,存放第三方包和编译产物 |
GOBIN |
go install 生成的可执行文件存放目录,默认 $GOPATH/bin |
GOOS |
目标操作系统,用于交叉编译,如 linux、windows、darwin |
GOARCH |
目标 CPU 架构,如 amd64、arm64 |
GOPROXY |
模块代理地址,国内推荐设置为镜像加速下载 |
GO111MODULE |
是否启用 Modules,现代版本默认为 on |
GOCACHE |
编译缓存目录 |
2.2.1 配置国内代理(重要)
由于网络原因,国内开发者下载依赖时常常超时。强烈建议配置 Go 模块代理:
# 设置七牛云提供的公共代理
go env -w GOPROXY=https://goproxy.cn,direct
# 也可使用阿里云代理
# go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env -w 会将配置写入用户级配置文件(通常位于 $HOME/.config/go/env),无需修改系统环境变量即可持久化生效。
2.3 编写第一个 Go 程序
2.3.1 创建项目
mkdir hello && cd hello
go mod init example/hello
go mod init 会创建一个 go.mod 文件,声明模块路径,标志着这是一个 Go 模块。
2.3.2 编写代码
创建文件 main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
代码解析:
package main:声明这是一个可执行程序的入口包。只有main包且包含main函数的程序才能编译为可执行文件。import "fmt":导入标准库中的格式化输入输出包。func main():程序入口函数,运行时从这里开始执行。fmt.Println:打印一行文本到标准输出。
2.3.3 运行程序
# 直接运行(编译并执行,不生成持久化文件)
go run main.go
# 输出: Hello, Go!
2.4 Go 工具链命令详解
Go 提供了一个统一的 go 命令,集成了构建、测试、依赖管理等众多子命令。以下是最常用的命令:
| 命令 | 作用 |
|---|---|
go run |
编译并直接运行程序,不保留可执行文件 |
go build |
编译程序,生成可执行文件 |
go install |
编译并安装到 GOBIN 目录 |
go test |
运行测试 |
go fmt |
格式化代码(按官方风格) |
go vet |
静态检查,发现可疑代码 |
go mod |
模块依赖管理 |
go get |
添加/更新依赖 |
go doc |
查看包/函数文档 |
go env |
查看/设置环境变量 |
go clean |
清理编译产物和缓存 |
go tool |
调用底层工具(如 pprof、trace) |
2.4.1 go build 详解
# 编译当前目录,生成与目录同名的可执行文件
go build
# 指定输出文件名
go build -o myapp
# 交叉编译:在任意平台生成 Linux ARM64 可执行文件
GOOS=linux GOARCH=arm64 go build -o myapp-linux-arm64
2.4.2 go fmt:统一代码风格
Go 极其强调代码风格的一致性,并通过 gofmt(go fmt 的底层工具)强制规范代码格式。这意味着所有 Go 代码看起来都高度一致,消除了团队内关于”花括号该放哪里”“用 Tab 还是空格”的争论。
# 格式化当前目录所有 .go 文件
go fmt ./...
约定:Go 使用 Tab 缩进,左花括号不换行。提交代码前务必运行
go fmt。
2.4.3 go vet:静态分析
go vet 能在不运行程序的情况下发现潜在错误,如 Printf 格式化参数不匹配、不可达代码、错误的结构体标签等:
go vet ./...
2.5 IDE 与编辑器配置
主流的 Go 开发工具有:
- Visual Studio Code + 官方 Go 扩展(最流行,免费):提供智能补全、跳转、调试、重构等功能,底层依赖
gopls(Go 官方语言服务器)。 - GoLand:JetBrains 出品的专业 Go IDE,功能强大(商业软件)。
- Vim/Neovim +
vim-go或 LSP 插件:适合命令行重度用户。
安装 VS Code Go 扩展后,首次打开 Go 文件时会提示安装一系列工具(gopls、dlv 调试器等),按提示安装即可。
2.6 GOPATH 模式与 Modules 模式
在 Go 1.11 之前,所有代码必须放在 GOPATH/src 目录下,依赖管理混乱。自 Go 1.16 起,Modules 成为默认且推荐的依赖管理方式,项目可以放在任意目录,通过 go.mod 管理依赖。
建议:新项目一律使用 Modules 模式,无需关心 GOPATH。本教程后续内容均基于 Modules。
关于 Modules 的详细用法,我们将在第 10 章深入讲解。
2.7 本章小结
本章完成了 Go 开发环境的搭建,介绍了 Go 工具链的核心命令、关键环境变量(特别是国内代理配置),并运行了第一个 Go 程序。掌握 go run、go build、go fmt、go vet 等命令是后续学习的基础。
下一章我们将系统学习 Go 的基础语法与数据类型。