最近开始学go,把命令行相关工具汇总到这里
1. go build
go build是编译,计算文件的依赖关系,编译源码文件、代码包以及依赖的代码包,生成可执行文件。
-
go build无参构造:
go build,默认构建当前目录下的main包,生成可执行文件,文件名为当前目录名。 -
go build指定文件:
go build main.go,构建指定文件,生成可执行文件,文件名为main。 -
go build指定目录:
go build ./,构建指定目录下的main包,生成可执行文件,文件名为当前目录名。 -
go build缩小可执行文件的体积。
go build -ldflags "-s -w",去掉符号表和调试信息,缩小可执行文件的体积。-s去掉符号表,在程序panic的时候stack trace就没有任何文件名/行号信息了,-w的作用是去掉DWARF调试信息,而后得到的程序就不能用gdb调试了RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o blog main.go -
stack trace是指程序在运行时,当发生异常时,程序会打印出当前的调用栈信息,这个信息就叫做stack trace。
-
DWARF是一种调试信息格式,它是一种标准的调试信息格式,它的全称是Debugging With Arbitrary Record Formats,意思是用任意的记录格式来调试。
-
gdb调试是指在程序运行时,可以通过gdb命令来查看程序的运行状态,比如查看程序的变量值,查看程序的调用栈等等。
2.go install
go install是编译并安装,将编译出来的可执行文件放到$GOPATH/bin目录下,将编译的中间件放到pkg目录下
-
使用go install -n查看运行过程中该命令做了什么事情,不执行
-
使用go install -v查看编译过程中的详细信息
-
使用go install -x查看编译过程中的详细信息,包括编译器的参数
-
使用go install -a强制重新编译所有的包
-
使用go install -i强制重新安装所有的包
-
使用go install -work查看编译过程中的临时文件
-
使用go install -race编译带有race检测的程序
-
使用go install -msan编译带有msan检测的程序
-
race检测是指在程序运行时,检测程序中是否存在数据竞争的问题,如果存在数据竞争的问题,程序会报错。
-
msan检测是指在程序运行时,检测程序中是否存在内存泄漏的问题,如果存在内存泄漏的问题,程序会报错。
-
交叉编译,在一个平台生成另外一个平台的可执行文件。
GOOS=linux GOARCH=amd64 go install,在windows平台生成linux平台的可执行文件。 -
GOOS是指目标平台的操作系统(darwin、freebsd、linux、windows)。
-
GOARCH是指目标平台的体系架构(386、amd64、arm)。
-
CGO_ENABLED=0是指禁用cgo,因为交叉编译时,cgo是不支持的。
3.go run
go run是编译并运行。对象只能是单个或者多个.go文件,且不能为测试文件
-
无法针对包运行go run,只能使用go build编译整个包,再运行编译后的可执行文件。
-
使用go run -work 可以显示当前的编译目录。
-
使用go run -x 可以显示编译过程中的命令。
-
使用go run -gcflags "-m" 可以显示编译过程中的内存分配情况。
4.go test
go test是测试,测试文件有固定结构以_test.go结尾
-
单元测试,导入测试框架testing。
-
testing是go语言自带的测试框架,可以用来测试函数,方法,接口,结构体等等。
-
testing框架用法,测试用例文件名必须以_test.go结尾,测试用例函数必须以Test开头,测试用例函数必须接受一个*testing.T类型的参数,测试用例函数必须在同一个包中。
-
测试用例函数中,可以使用t.Log()记录日志,使用t.Fail()或t.FailNow()标记测试失败,使用t.Fatal()或t.FatalNow()标记测试失败并终止测试。
-
测试用例函数中,可以使用t.Run()运行子测试用例,子测试用例函数必须以Test开头,子测试用例函数必须接受一个*testing.T类型的参数,子测试用例函数必须在同一个包中。
-
测试用例函数中,可以使用t.Parallel()标记测试用例函数可以并行执行。
-
测试用例函数中,可以使用t.Skip()或t.SkipNow()跳过测试用例函数。
-
测试用例函数中,可以使用t.Helper()标记测试用例函数是辅助函数。
-
测试用例函数中,可以使用t.Cleanup()注册清理函数。
-
子测试用例是测试用例的一部分,子测试用例可以并行执行,子测试用例可以跳过,子测试用例可以注册清理函数。
-
辅助函数是测试用例的一部分,辅助函数可以并行执行,辅助函数可以跳过,辅助函数可以注册清理函数。
-
基准测试
-
基准测试是测试函数的性能,基准测试函数会执行b.N次,然后计算平均值,b.N的值是不断增加的,直到测试时间超过1秒,所以基准测试函数的执行时间不能太短,否则b.N的值会很小,测试结果不准确。
-
基准测试函数必须以Benchmark开头,基准测试函数必须接受一个*testing.B类型的参数,基准测试函数必须在同一个包中。
-
覆盖率测试
-
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out -o cover.html查看覆盖率测试报告 -
go tool cover -html=cover.out查看覆盖率测试报告 -
覆盖率测试用于统计通过程序包的测试用例覆盖了多少代码
-
go test -coverprofile=cover.out生成覆盖率测试报告 -
go test -coverprofile=cover.out -covermode=count生成覆盖率测试报告,统计每个代码块被执行的次数 -
go test -coverprofile=cover.out -covermode=atomic生成覆盖率测试报告,统计每个代码块被执行的次数,使用原子操作 -
go test -coverprofile=cover.out -covermode=set生成覆盖率测试报告,统计每个代码块被执行的次数,使用集合 -
go test -coverprofile=cover.out -covermode=atomic -coverpkg=github.com/astaxie/beego,github.com/astaxie/beego/context生成覆盖率测试报告,统计每个代码块被执行的次数,使用原子操作,只统计github.com/astaxie/beego和github.com/astaxie/beego/context包的代码覆盖率 -
go test -coverprofile=cover.out -covermode=atomic -coverpkg=./...生成覆盖率测试报告,统计每个代码块被执行的次数,使用原子操作,只统计当前包及其子包的代码覆盖率 -
go test -coverprofile=cover.out -covermode=atomic -coverpkg=.生成覆盖率测试报告,统计每个代码块被执行的次数,使用原子操作,只统计当前包的代码覆盖率
5.go fmt
go fmt是格式化代码,go fmt会自动格式化代码,使代码更加美观,更加易读。
-
如果传入具体文件路径,会格式化该文件
-
如果传入目录路径,会格式化该目录下的所有文件
-
如果不传入参数,会格式化当前目录下的所有文件
6.go get
go get是下载第三方包。把第三方包下载到GOPATH/src目录下。
-
很多go的三方包被托管到github上,所以我们可以直接使用go get github.com/xxx/xxx来下载。包的路径是有规范的,一般是github.com/用户名/项目名。
-
使用go get -u github.com/xxx/xxx可以更新包。
-
使用go get -n github.com/xxx/xxx可以查看go get命令执行的过程。
7.go doc
go doc是查看go的文档
-
使用go doc fmt可以查看fmt包的文档
-
使用go doc fmt Println可以查看fmt包中的Println函数的文档
-
使用go doc -http=:6060可以在本地启动一个web服务,通过浏览器访问http://localhost:6060可以查看go的文档
8.go tool
go tool是使用go的工具
-
使用go tool compile可以编译go的源代码
-
使用go tool link可以链接go的源代码
-
使用go tool asm可以汇编go的源代码
-
使用go tool cgo可以使用cgo
-
使用go tool dist可以查看go的分布式编译
-
使用go tool fix可以修复go的代码
-
使用go tool nm可以查看go的符号表
-
使用go tool objdump可以查看go的目标文件
-
使用go tool pack可以打包go的目标文件
-
使用go tool pprof可以查看go的性能分析
-
go tool pprof -http=:6060 cpu.prof可以在本地启动一个web服务,通过浏览器访问http://localhost:6060可以查看go的性能分析 -
Graphviz是一个图形绘制工具,可以用来绘制结构化的图形网络,支持多种格式输出
-
使用go tool trace可以查看go的跟踪
-
使用go tool yacc可以使用yacc
-
使用go tool vet可以查看go的vet
-
使用go tool dist list可以查看go的分布式编译列表
-
使用go tool dist test可以测试go的分布式编译
-
使用go tool dist install可以安装go的分布式编译
-
使用go tool dist clean可以清除go的分布式编译
-
使用go tool dist env可以查看go的分布式编译环境变量
-
使用go tool dist test -no-rebuild可以测试go的分布式编译,不重新编译
9.其他命令
-
go version是查看go的版本
-
go list是查看go的包列表
-
go vet是检查代码
-
go clean是清除编译的文件
-
go mod是go module的命令
-
go env是查看go的环境变量
本文使用 文章同步助手 同步