随机
Enter 搜索 ↑↓ 切换 Esc 清空

go

命令

Go 语言工具链

go

Go 语言工具链

补充说明

go 是 Go 语言的官方命令行工具,用于编译、测试、格式化、安装 Go 代码。Go 1.11+ 引入 Go Modules 进行依赖管理。

语法

go <command> [arguments]

模块管理

# 初始化模块
go mod init example.com/myapp
go mod init myapp

# 查看模块信息
go mod info
go list -m all                # 列出所有依赖模块

# 整理依赖
go mod tidy                   # 添加缺失的依赖,删除无用依赖
go mod tidy -v                # 详细输出

# 下载依赖
go mod download
go mod download module@version

# 验证依赖
go mod verify

# 查看模块依赖图
go mod graph
go mod graph | grep module-name

# 查看模块为什么需要某个依赖
go mod why module-name

# 复制依赖到 vendor 目录
go mod vendor

# 查看编辑模块依赖
go mod edit -module=example.com/newname
go mod edit -require=module@version
go mod edit -droprequire=module
go mod edit -exclude=module@version
go mod edit -replace=old@version=new@version

构建编译

# 编译当前目录
go build
go build .                     # 同上

# 编译指定包
go build ./...
go build ./cmd/server
go build example.com/myapp

# 指定输出文件
go build -o myapp
go build -o bin/myapp ./cmd/server

# 减小二进制体积
go build -ldflags="-s -w" -o myapp

# 编译指定系统架构
GOOS=linux go build
GOOS=windows go build
GOOS=darwin go build
GOARCH=amd64 go build
GOOS=linux GOARCH=arm64 go build

# 常见平台组合
# Linux: linux/amd64, linux/arm64
# Windows: windows/amd64
# macOS: darwin/amd64, darwin/arm64

# 静态编译
CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp

# 编译并安装到 $GOPATH/bin
go install
go install ./cmd/server
go install example.com/myapp@latest

# 获取并编译包
go get example.com/myapp@latest
go get example.com/myapp@v1.2.3

# 获取依赖
go get ./...

运行测试

# 运行所有测试
go test
go test ./...
go test ./pkg/...

# 运行指定包测试
go test ./path/to/package

# 运行单个测试函数
go test -run TestFunctionName
go test -run "^TestName$"

# 详细输出
go test -v
go test -v -run TestFunction

# 测试覆盖率
go test -cover
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go tool cover -func=coverage.out

# 基准测试
go test -bench=.
go test -bench=. -benchmem
go test -bench=BenchmarkName -benchtime=5s

# 竞态检测
go test -race

# 压力测试
go test -count=100 -run TestName

# 短测试(跳过长时间测试)
go test -short

# 测试特定文件
go test -run "" file_test.go

# 生成测试二进制
go test -c -o test binary

代码质量

# 格式化代码
go fmt
go fmt ./...
gofmt -w .
gofmt -d .                    # 显示差异

# 代码检查
go vet
go vet ./...

# 静态检查(需要安装)
go install honnef.co/go/tools/cmd/staticcheck@latest
staticcheck ./...

# 代码复杂度分析
go install github.com/fzipp/gocyclo/cmd/gocyclo@latest
gocyclo -avg -over 15 .

# 代码重复检测
go install github.com/mibk/dupl@latest
dupl -t 50

# 安全检查
go install github.com/securego/gosec/v2/cmd/gosec@latest
gosec ./...

# 地道 Go 代码检查
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint run

代码生成

# 生成代码(由 source 中的指令)
go generate
go generate ./...

# 字符串转换为常量
#go:generate stringer -type=Pill

# Mock 生成
#go:generate mockgen -source=request.go -destination=mock_request.go

# 生成文档
go doc
go doc fmt
go doc fmt.Printf
go doc -all fmt

# 查看包文档
go doc github.com/gin-gonic/gin

# 启动文档服务器
godoc -http=:6060

版本管理

# 查看 Go 版本
go version

# 升级依赖版本
go get module@version
go get module@latest
go get module@v1.2.3

# 升级所有依赖
go get -u
go get -u=patch                          # 只升级补丁版本

# 查看可用版本
go list -m -versions module
go list -m -versions github.com/gin-gonic/gin

# 查看模块详细信息
go list -m -json github.com/gin-gonic/gin

# 回退依赖版本
go get module@v1.0.0

# 清理模块缓存
go clean -modcache

工具命令

# 查看环境信息
go env
go env GOPATH
go env GOOS

# 设置环境变量
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GMO=on

# 查看模块下载路径
go env GOMODCACHE
go env GOPATH

# 清理构建缓存
go clean
go clean -cache
go clean -testcache                     # 清理测试缓存
go clean -modcache                      # 清理模块缓存

# 查看 GOPATH
go env GOPATH

# 查看模块代理
go env GOPROXY

# 设置代理(国内推荐)
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env -w GOSUMDB=sum.golang.org

# 打印构建信息
go build -x

# 列出包
go list
go list ./...
go list -m all

go.mod 文件

module example.com/myapp

go 1.21

require (
    github.com/gin-gonic/gin v1.9.1
    github.com/spf13/cobra v1.7.0
)

require (
    golang.org/x/sys v0.12.0 // indirect
)

replace github.com/old/module => github.com/new/module v1.0.0

exclude github.com/problematic/module v1.0.0

常用组合命令

# 完整构建流程
go mod tidy
go test ./...
go build -ldflags="-s -w" -o myapp

# CI 流水线常用命令
go mod download
go mod verify
go fmt ./...
go vet ./...
go test -race -cover ./...
go build

# 交叉编译常用
CGO_ENABLED=0 GOOS=linux   GOARCH=amd64 go build -o myapp-linux-amd64
CGO_ENABLED=0 GOOS=linux   GOARCH=arm64 go build -o myapp-linux-arm64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exe
CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64 go build -o myapp-darwin-amd64

# 开发时热编译(需要安装 air)
go install github.com/cosmtrek/air@latest
air

# 依赖分析
go mod graph | grep -v "^[" | cut -d' ' -f1 | sort -u