一、项目初始化与模块管理
-
go mod init
- 作用:初始化新的 Go 模块(生成
go.mod
文件) - 示例:
go mod init github.com/yourname/project
- 关键点:
- 必须在项目根目录执行
- 模块路径通常为代码仓库地址
- 作用:初始化新的 Go 模块(生成
-
go mod tidy
go mod tidy
命令会根据项目代码中实际的导入情况,对go.mod
和go.sum
文件进行更新和整理,确保项目依赖的正确性和完整性。它主要完成两个核心任务: -
添加缺失的依赖
- 检查项目代码中引入的包
- 如果这些包在
go.mod
文件中不存在对应的依赖项,会自动将这些依赖添加到go.mod
文件中 - 下载对应的模块版本到本地缓存
-
移除不再使用的依赖
- 扫描
go.mod
文件中的依赖项 - 若发现某些依赖在项目代码中没有被引用,会将这些无用的依赖从
go.mod
文件中移除 - 清理本地缓存中对应的模块文件
- 扫描
- 工作原理解析
-
解析导入路径
- 遍历项目中的所有
.go
文件 - 解析其中的
import
语句,确定项目实际使用的包
- 遍历项目中的所有
-
对比依赖信息
- 将解析得到的包信息与
go.mod
文件中的依赖列表进行对比 - 找出缺失和多余的依赖项
- 将解析得到的包信息与
-
更新
go.mod
文件- 添加缺失的依赖项
- 移除不再使用的依赖项
- 更新依赖的版本信息
-
更新
go.sum
文件go.sum
文件用于记录项目依赖的哈希值,确保依赖的完整性和安全性- 更新
go.sum
文件,使其与go.mod
文件中的依赖信息保持一致
-
下载和清理模块
- 根据更新后的
go.mod
文件,下载缺失的模块到本地缓存 - 清理不再使用的模块
- 根据更新后的
- 使用场景
| 场景 | 说明 |
|------|------|
| 项目初始化 | 开始新项目时快速初始化依赖关系,确保所有必要依赖被正确添加 |
| 代码修改 | 添加/删除导入语句后运行,及时更新依赖信息,避免编译错误 |
| 版本升级 | 手动修改go.mod
文件中的版本信息后运行,下载并更新到指定版本 |
| 依赖清理 | 清理不再使用的依赖,减小项目依赖体积 |
go get
- 作用:下载/更新依赖包
- 常用参数:
go get github.com/pkg/errors@latest # 获取最新版本 go get github.com/gin-gonic/gin@v1.9.0 # 指定版本 go get -u ./... # 更新所有依赖
二、代码构建与运行
-
go build
- 作用:编译生成可执行文件
- 示例:
go build -o bin/app cmd/main.go # 指定输出路径 go build -tags=jsoniter . # 使用编译标签
- 注意:
- 默认输出到当前目录
- 跨平台编译需加
GOOS
和GOARCH
环境变量
-
go run
- 作用:直接编译并运行
- 适用场景:快速测试
- 示例:
go run main.go --port=8080
-
go install
- 作用:编译并将结果安装到
$GOPATH/bin
- 典型用途:安装全局工具
- 示例:
go install golang.org/x/tools/cmd/goimports@latest
- 作用:编译并将结果安装到
三、测试与性能分析
-
go test
- 作用:运行单元测试
- 常用参数:
go test ./... # 递归测试所有包 go test -v -run TestAdd # 运行特定测试函数 go test -coverprofile=coverage.out # 生成覆盖率报告
- 覆盖率可视化:
go tool cover -html=coverage.out
-
go benchmark
- 作用:性能基准测试
- 示例:
go test -bench=. -benchmem
- 输出解读:
ns/op
:每次操作纳秒数B/op
:每次操作内存分配allocs/op
:每次操作分配次数
-
go tool pprof
- 作用:性能分析
- 使用流程:
go test -cpuprofile=cpu.prof -memprofile=mem.prof go tool pprof cpu.prof
四、代码质量工具
-
go fmt
- 作用:格式化代码(自动对齐、缩进)
- 推荐用法:
go fmt ./...
-
go vet
- 作用:静态代码检查(常见错误检测)
- 示例:
go vet ./...
- 典型检测项:
fmt.Printf
参数不匹配- 锁拷贝问题
-
golangci-lint
(需单独安装)- 作用:聚合多种 linter
- 推荐命令:
golangci-lint run --fix
五、依赖与文档
-
go list
- 作用:查看模块/包信息
- 实用示例:
go list -m all # 查看所有依赖 go list -json ./... # JSON格式输出
-
go doc
- 作用:查看文档
- 示例:
go doc fmt.Printf go doc -http=:6060 # 启动本地文档服务器
-
go clean
- 作用:清理构建缓存
- 常用:
go clean -cache # 清理构建缓存 go clean -testcache # 清理测试缓存
六、跨平台编译
# Linux 64位
GOOS=linux GOARCH=amd64 go build -o app-linux
# Windows
GOOS=windows GOARCH=amd64 go build -o app.exe
# Mac ARM
GOOS=darwin GOARCH=arm64 go build -o app-mac
注意:交叉编译需安装对应平台的工具链
七、环境管理
-
查看环境变量
go env go env GOPATH # 查看特定变量
-
修改环境变量
go env -w GO111MODULE=on
八、特殊工具链
-
go generate
- 作用:执行代码生成指令
- 典型用途:
- 生成 protobuf 代码
- 自动化模板代码
-
go tool
子命令go tool compile
:底层编译器go tool nm
:查看符号表go tool objdump
:反汇编