go常⽤命令⾏命令安装⼯具
最简单的⽅式
$ go get -u golang/x/tool/...
替代⽅式
$ GO111MODULE=on go get golang/x/tool/cmd/stress
环境变量
$ go env
$ go env GOPATH GOO GOARCH
$ go env -w GOPROXY=goproxy,direct
collision cour$ go help environment
开发
运⾏代码
$ go run . # 运⾏当前⽬录的包
$ go run ./cmd/foo # 运⾏ ./cmd/foo ⽬录下的包获取依赖
$ go /foo/bar@v1.2.3
$ go /foo/bar@8e1b8d3
留美签证
$ go list -m all # 显⽰所有依赖
$ go mod why -m golang/x/y # 为什依赖它?
$ go clean -modcache # 清除模块缓存格式化代码
$ gofmt -d -w -r 'foo -> Foo' . # 替换 foo 为 Foo
$ gofmt -d -w -r 'strings.Replace(a, b, -1) -> strings.ReplaceAll(a, b)' .
查看 Go ⽂档
$ go doc strings # 查看 strings 包的简化版⽂档
$ go doc -all strings # 查看 strings 包的全部⽂档
$ go doc strings.Replace # 查看 strings.Replace 函数的⽂档
$ go doc sql.DB # 查看 databa/sql.DB 类型的⽂档
$ go doc sql.DB.Query # 查看 databa/sql.DB.Query ⽅法的⽂档
$ go doc -src strings.Replace # 查看 strings.Replace 函数的源码
Testing
运⾏测试
$ go test . # 运⾏当前⽬录的所有测试
$ go test ./... # 运⾏当前⽬录及其⼦⽬录的所有测试
$ go test ./foo/bar # 运⾏ ./foo/bar ⽬录的所有测试
$ go test -race ./... # 启⽤ race 检测的测试
$ go test -count=1 ./... # 运⾏测试时绕过测试缓存
$ go clean -testcache # 删除所有缓存的测试结果
$ go test -v -run=^TestFooBar$ . # 运⾏名称为 TestFooBar 的测试
$ go test -v -run=^TestFoo . # 运⾏名称以 TestFoo 开头的测试
$ go test -v -run=^TestFooBar$/^Baz$ . # 仅运⾏ FooBar 测试下的 Baz ⼦测试
$ go test -short ./... # 跳过长时间运⾏的测试
$ go test -failfast ./... # 失败后请勿再进⾏进⼀步的测试
Profiling Test Coverage
$ go test -cover ./...
$ go test -coverprofile=/tmp/profile.out ./... # coverage profile for browr
$ go tool cover -html=/tmp/profile.out
$ go test -covermode=count -coverprofile=/tmp/profile.out ./... # coverage with frequency shown
$ go tool cover -html=/tmp/profile.out
$ go test -coverprofile=/tmp/profile.out ./... # coverage in CLI without any browr
$ go tool cover -func=/tmp/profile.out
$ go test -run=^TestFooBar$ -count=500 .
$ go test -c -o=/st . # 使⽤压⼒⼯具 golang/x/tools/cmd/stress
$ stress -p=4 /st -test.run=^TestFooBar$
Testing all dependencies
$ go test all
提交前检查
格式化代码
$ gofmt -w -s - # 格式化 ⽂件
$ gofmt -w -s -d . # 递归格式化当前⽬录和⼦⽬录所有⽂件
$ go fmt ./... # 另外⼀种格式化⼯具,等价 gofmt -l -w ./...
董事长 英文通过 vet 进⾏静态分析
$ go # 检查 ⽂件
$ go vet . # 检查当前⽬录下所有⽂件
$ go vet ./... # 检查当前⽬录及⼦⽬录下所有⽂件
$ go vet ./foo/bar # 检查 ./foo/bar ⽬录下所有⽂件
$ go vet -composites=fal ./... # 禁⽤⼀些分析器
实验性的分析器
$ cd /tmp
$ GO111MODULE=on go get golang/x/tools/go/analysis/pass/nilness/cmd/nilness $ GO111MODULE=on go get golang/x/tools/go/analysis/pass/shadow/cmd/shadow $ go vet -vettool=$(which nilness) ./...
测试时禁⽤ vet ⼯具
$ go test -vet=off ./...
整理代码(LintingCode)
$ cd /tmp # 安装 linter
$ GO111MODULE=on go get golang/x/lint/golint
$ # Lint file
$ golint . # Lint all files in the current directory
$ golint ./... # Lint all files in the current directory and sub-directories
$ golint ./foo/bar # Lint all files in the ./foo/bar directory
整理和验证依赖
$ go mod tidy # 移除所有未使⽤过的依赖
$ go mod verify # 检查依赖的 hash
编译和部署
编译可执⾏⽂件
$ go build -o=/tmp/foo . # 编译当前⽬录的包
$ go build -o=/tmp/foo ./cmd/foo # 编译 ./cmd/foo ⽬录的包
编译缓存
$ go env GOCACHE # 检查你的编译缓存存放⽬录
$ go build -a -o=/tmp/foo . # 强制重编译所有包
$ go clean -cache # 清除缓存
编译过程
$ go list -deps . | sort -u # 列出⽤于编译可执⾏⽂件的所有包
$ go build -a -x -o=/tmp/foo . # 重建所有内容并显⽰运⾏的命令
$ GOOS=linux GOARCH=amd64 go build -o=/tmp/linux_amd64/foo .
$ GOOS=windows GOARCH=amd64 go build -o=/tmp/windows_ .
$ go tool dist list # 列出所有⽀持的操作系统和CPU架构
你呢英文使⽤编译器和链接器 flags
$ go tool compile -help # 查看编译器可⽤的 flag
$ go build -gcflags="-m -m" -o=/tmp/foo . # 打印有关优化决策的信息
$ go build -gcflags="all=-m" -o=/tmp/foo . # 打印包括依赖的优化决策信息
$ go build -gcflags="all=-N -l" -o=/tmp/foo . # 禁⽤优化和内联
$ go tool link -help # 查看链接器可⽤的 flag
$ go build -ldflags="-X main.version=1.2.3" -o=/tmp/foo . # 增加版本信息
生气用英语怎么说$ go build -ldflags="-s -w" -o=/tmp/foo . # 从⼆进制⽂件中删除调试信息
$ CGO_ENABLE=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' . # 使⼆进制⽂件尽可能静态问题诊断和优化
运⾏和⽐较基准测试
$ go test -bench=. ./... # 运⾏所有测试和基准测试
$ go test -run=^$ -bench=. ./... # 只运⾏所有的基准测试
$ go test -run=^$ -bench=^BenchmarkFoo$ ./... # 只运⾏ BenchmarkFoo 基准测试
$ go test -bench=. -benchmem ./... # 强制将内存分配统计信息包含在输出中
$ go test -bench=. -benchtime=5s ./... # 运⾏每个基准测试⾄少5秒钟
$ go test -bench=. -benchtime=500x ./... # 保证每个基准测试精确进⾏500次迭代
华东师范大学第二附属中学$ go test -bench=. -count=3 ./... # 重复每个基准测试3次
$ go test -bench=. -cpu=1,4,8 ./.... # 将GOMAXPROCS设置为1、4和8运⾏基准测试⽐较基准测试的变化
$ cd /tmp # 安装 benchcmp ⼯具
$ GO111MODULE=on go get golang/x/tools/cmd/benchcmp
$ go test -run=^$ -bench=. -benchmem ./... > / # 进⾏⼀些修改、优化
$ go test -run=^$ -bench=. -benchmem ./... > /
$ benchcmp / /
Profiling and Tracing
运⾏和⽐较基准测试
$ go test -run=^$ -bench=^BenchmarkFoo$ -cpuprofile=/tmp/cpuprofile.out .
$ go test -run=^$ -bench=^BenchmarkFoo$ -memprofile=/tmp/memprofile.out .
$ go test -run=^$ -bench=^BenchmarkFoo$ -blockprofile=/tmp/blockprofile.out .
$ go test -run=^$ -bench=^BenchmarkFoo$ -mutexprofile=/tmp/mutexprofile.out .
$ go test -run=^$ -bench=^BenchmarkFoo$ -o=/st -cpuprofile=/tmp/cpuprofile.out .六级作文常用句型
$ go tool pprof -http=:5000 /tmp/cpuprofile.out # 在浏览器中审查
$ go tool pprof --nodefraction=0.1 -http=:5000 /tmp/cpuprofile.out # 忽略⼩于 10% 的节点Tracing ⽣成lowbattery
$ go test -run=^$ -bench=^BenchmarkFoo$ -trace=/tmp/trace.out .
英语句子在线翻译
$ go tool trace /tmp/trace.out # ⽬前只在 Chrome/Chromium 可⽤
竞态条件检查
$ go build -race -o=/tmp/foo . # 别⽤于⽣产环境
$ GORACE="log_path=/tmp/race" /tmp/foo # 输出到⽂件⽽不是标准错误
依赖管理(Module)
项⽬依赖更新
$ go list -m -/alecthomas/chroma # 检查该库是否有新版本
$ go list -m -u all # 更新项⽬所有依赖
依赖升级或降级
$ go /foo/bar@latest # 最新版本
$ go /foo/bar@v1.2.3 # 特定版本 v1.2.3
$ go /foo/bar@7e0369f # 到特定提交
运⾏所有包的全部测试检验不兼容性
$ go mod tidy $ go test all
使⽤依赖的本地版本
$ go mod edit -/alexedwards/argon2id=/home/alex/code/argon2id # 创建 replace 规则$ go mod edit -/alexedwards/argon2id # 删除 replace 规则
其他⼯具
升级代码到 Go 新版本
$ go fix ./...回报英文
报告 Bug
$ go bug # 会打开浏览器,定位 Go 代码仓库的 issue 页⾯