常用命令

  1. 1. build 编译包和依赖项
  2. 2. clean 删除对象文件和缓存的文件
  3. 3. docgodoc 显示包文档
  4. 4. env 打印Go语言的环境信息
  5. 5. fixgo tool fix 会把指定包中的所有Go语言源码文件中旧版本代码修正为新版本的代码,升级版本时非常有用
  6. 6. fmtgofmt 格式化go源文件
  7. 7. generate
  8. 8. get 下载并安装包和依赖(下载包和依赖,并对它们进行编译安装)
  9. 9. install 编译并安装指定包及它们的依赖包,
  10. 10. list 列出包和模块信息
  11. 11. mod 管理模块
  12. 12. run 编译并运行Go程序
  13. 13. test 测试包
  14. 14. tool 运行指定的go工具
  15. 15. version 查看当前go语言版本
  16. 16. vet 报告包中可能出现的错误

build 编译包和依赖项

  1. build 编译包和依赖项
  2. usage: go build [-o output] [-i] [build flags] [packages]
  3. 用法: go build [-o output] [-i] [build 参数] [包]
  4. 可选参数:
  5. -o 编译单个包才能使用(不能同时对多个代码包进行编译),例如我们经常重新命名可执行文件名字
  6. -i 标志安装的包是目标的依赖项
  7. -a 强制重新构建已经更新的包
  8. -n 打印编译时执行的命令,但不真正执行
  9. -p 开启并发编译,默认情况下该值为CPU逻辑核数
  10. -race 开启竞态检测,只支持linux/amd64freebsd/amd64darwin/amd64windows/amd64.
  11. -msan 内存扫描
  12. -v 编译包时打印包的名称
  13. -work 编译时打印临时工作目录的名称,退出时不删除它
  14. -x 打印编译时执行的命令(打印编译时会用到的所有命令)
  15. -asmflags '[pattern=]arg list',传递给每个go工具asm调用的参数
  16. -buildmode mode 使用编译模式, 更多信息请参见“go help buildmode
  17. -compiler name 设置编译时使用编译器名,编译器名称只有2个选项(gccgogc)
  18. -gccgoflags '[pattern=]arg list' 传递每个gccgo编译器/链接器调用的参数列表
  19. -gcflags '[pattern=]arg list' 用于指定需要传递给go tool compile命令的参数的列表,更多信息参见(go tool compile)
  20. -installsuffix suffix 为了使当前的输出目录与默认的编译输出目录分离,可以使用这个标记.此标记的值会作为结果文件的父目录名称的后缀.其实,如果使用了-race标记,这个标记会被自动追加且其值会为race.如果我们同时使用了-race标记和-installsuffix,那么在-installsuffix标记的值的后面会再被追加_race,并以此来作为实际使用的后缀
  21. -ldflags '[pattern=]arg list' 用于指定需要传递给go tool link命令的参数的列表
  22. -linkshared
  23. -mod mode 模块下载方式,只有2个选项(readonlyvendor),更多信息请参见(go help modules)
  24. -pkgdir dir 设置包目录.编译器会只从该目录中加载代码包的归档文件,并会把编译可能会生成的代码包归档文件放置在该目录下
  25. -tags 'tag list'
  26. -toolexec 'cmd args' 用于在编译期间使用一些Go语言自带工具(如vetasm等)的方式
  27. 示例:
  28. go build [1个或多个go源文件, 或者包名, 或者包所在目录]
  29. go build a.go b.go main.go
  30. go build main.go
  31. go build hello
  32. # 把main.go编译成可执行文件hello.exe
  33. go build -o hello.exe main.go
  34. # 打印编译时执行的命令,但不真正执行
  35. go build -n
  36. # 答应工作目录
  37. go build -work

clean 删除对象文件和缓存的文件

  1. clean 删除执行其他命令时产生的文件、目录和缓存文件.
  2. 具体地说.clean 会删除从导入路径对应的源码目录中,删除以下这些文件和目录
  3. _obj/ old object directory, left from Makefiles
  4. _test/ old test directory, left from Makefiles
  5. _testmain.go old gotest file, left from Makefiles
  6. test.out old test log, left from Makefiles
  7. build.out old test log, left from Makefiles
  8. *.[568ao] object files, left from Makefiles
  9. DIR(.exe) from go build
  10. DIR.test(.exe) from go test -c
  11. MAINFILE(.exe) from go build MAINFILE.go
  12. *.so from SWIG
  13. usage: go clean [clean flags] [build flags] [packages]
  14. 用法: go clean [clean 参数] [build参数]
  15. 可选参数:
  16. -i 会删除安装当前代码包所有产生的所有文件, 如果当前包是一个普通包(不是main包),则结果文件指的就是在工作区的pkg目录的相应目录下的归档文件.如果当前代码包中只包含一个命令源码文件, 则删除当前目录和在工作区的bin目录下的可执行文件和测试文件.
  17. -n 打印clean执行的命令,但不真正执行
  18. -r 删除当前代码包和所有的依赖包产生的文件、目录和缓存文件
  19. -x 打印clean执行的删除命令
  20. -cache 删除所有 go build 的缓存
  21. -testcache 删除当前包所有的测试结果

doc 显示包文档

  1. docgodoc 显示包或符号的文档, 更多用法请参考(godoc -h)
  2. usage: go doc [-u] [-c] [package|[package.]symbol[.methodOrField]]
  3. 用法: go doc [-u] [-c] [package|[package.]symbol[.methodOrField]]
  4. 可选参数:
  5. -c 区分参数包名的大小写.默认情况下,包名是大小写不敏感的
  6. -cmd 打印 main 包文档, 默认情况下不会打印 main 包文档
  7. -u 打印出所有的文档(同事包含可导出和不可导出实体)
  8. 示例:
  9. # 显示 hellomod 包文档,(注意 hellomod 和 Hellomod是不同的包)
  10. go doc -c hellomod

env 打印Go语言的环境信息

  1. env 打印Go语言的环境信息
  2. usage: go env [-json] [var ...]
  3. 用法: go env [-json] [变量 ...]
  4. 可选参数:
  5. -json json格式打印环境信息
  6. 示例:
  7. # 以json格式打印所有环境信息
  8. go env -json
  9. # 以json格式只打印 GOOS 程序构建环境的目标操作系统
  10. go env -json GOOS
  11. # 打印所有环境信息
  12. go env
  13. # 只打印 GOOS 程序构建环境的目标操作系统
  14. go env GOOS

fix与go tool fix 会把指定包中的所有Go语言源码文件中旧版本代码修正为新版本的代码,升级版本时非常有用

  1. fix 会把指定包中的所有Go语言源码文件中旧版本代码修正为新版本的代码
  2. usage: go fix [packages]
  3. 示例:
  4. go fix testmod
  5. go tool fix -h
  6. usage: go tool fix [-diff] [-r fixname,...] [-force fixname,...] [path ...]
  7. -diff 不将修正后的内容写入文件, 而只打印修正前后的内容的对比信息到标准输出
  8. -force string 使用此参数后, 即使源码文件中的代码已经与Go语言的最新版本相匹配, 也会强行执行指定的修正操作.该参数值就是需要强行执行的修正操作的名称,多个名称之间用英文半角逗号分隔
  9. -r string 只对目标源码文件做有限的修正操作.该参数的值即为允许的修正操作的名称.多个名称之间用英文半角逗号分隔

fmt与gofmt 格式化go源文件

Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制作了一个工具:go fmt(gofmt)

  1. fmtgofmt 命令 格式化go源文件,fmt命令实际"gofmt -l -w"命令之上做了一层包装,我们一般使用
  2. usage: go fmt [-n] [-x] [packages]
  3. 用法: go fmt [-n] [-x]
  4. 可选参数:
  5. -x 打印执行的命令
  6. -n 打印执行的命令,但不真正执行
  7. 示例:
  8. # 格式化 testmod 包, 并显示执行命令
  9. go fmt -x testmod
  10. gofmt 命令
  11. usage: gofmt [flags] [path ...]
  12. 用法: gofmt [参数] [路径 ...]
  13. 可选参数:
  14. -cpuprofile string cpu配置文件写入此文件
  15. -d 显示格式化前后差异,但不写入文件
  16. -e 打印所有错误, 默认只会打印不同行的前10个错误
  17. -l 列出需要格式化的文件
  18. -r string 重新规则,方便我们做批量替换,例如我们需要把hellomod.Hello替换成hellomod.HelloNew("hellomod.Hello -> hellomod.HelloNew")
  19. -s 简化代码
  20. -w 将结果直接写入到文件中
  21. 示例:
  22. # 格式当前目录代码
  23. gofmt -w ./
  24. # 把当前目录中的“hellomod.Hello” 替换成 "hellomod.HelloNew"
  25. gofmt -r "hellomod.Hello -> hellomod.HelloNew" -w ./

get 下载并安装包和依赖(下载包和依赖,并对它们进行编译安装)

  1. get 命令 下载并安装包和依赖(下载包和依赖,并对它们进行编译安装)
  2. usage: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]
  3. 用法: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [包]
  4. 可选参数:
  5. -d 只下载不安装(只执行下载动作, 不执行安装动作)
  6. -f 只有在包含了-u参数的时候才有效.该参数会让命令程序忽略掉对已下载代码包的导入路径的检查.如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了
  7. -fix 会下载代码包后先执行修正动作,而后再进行编译和安装
  8. -insecure 请谨慎使用, 允许使用不安全(http或者自定义域)的存储库中下载解析.
  9. 即:允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包.如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记.请在确定安全的情况下使用它.
  10. -t 同时也下载需要为运行测试所需要的包
  11. -u 强制从网络更新包和它的依赖包.默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包
  12. -v 显示执行的命令
  13. 示例:
  14. # 下载包
  15. go get github.com/donvito/hellomod

install 编译并安装指定包及它们的依赖包

  1. install 编译并安装指定包及它们的依赖包,先生成中间文件(可执行文件或者.a包),然后把编译好的结果移到$GOPATH/pkg或者$GOPATH/bin
  2. usage: go install [-i] [build flags] [packages]
  3. 用法: go install [-i] [编译 flags] [包]
  4. 可选参数:
  5. -i
  6. 示例:
  7. # 安装包
  8. go install github.com/gin-gonic/gin

list 列出包和模块信息

  1. list 列出包和模块信息
  2. usage: go list [-f format] [-json] [-m] [list flags] [build flags] [packages]
  3. 用法: go list [-f format] [-json] [-m] [list flags] [build flags] [包]
  4. 可选参数:
  5. -f {{.字段名}} 查看指定的字段信息
  6. -json json格式打印信息
  7. -m 列出模块信息
  8. 更多用法请参考(go help list)
  9. 示例:
  10. # 以json格式打印gapp包信息
  11. go list -json gapp
  12. # 打印模块信息
  13. go list -m testmod
  14. # 以json格式打印模块信息
  15. go list -m -json testmod
  16. # testmod模块打印结果:
  17. {
  18. "Path": "testmod",
  19. "Main": true,
  20. "Dir": "/Users/zhaoweijie/go/src/business-card/docker-compose/go-tutorials/9/examples/testmod",
  21. "GoMod": "/Users/zhaoweijie/go/src/business-card/docker-compose/go-tutorials/9/examples/testmod/go.mod"
  22. }

mod 管理模块

  1. mod 管理模块
  2. Usage: go mod <command> [arguments]
  3. 用法: go mod <命令> [参数]
  4. 可选命令<command>: go help mod <command>
  5. download 下载模块到本地缓存
  6. usage: go mod download [-json] [modules]
  7. 用法:
  8. 可选参数:
  9. -json
  10. 示例:
  11. # 下载模块,以json格式打印模块信息
  12. go mod download -json github.com/qq1060656096/hellomod
  13. # json格式打印 github.com/qq1060656096/hellomod 模块信息
  14. {
  15. "Path": "github.com/qq1060656096/hellomod",
  16. "Version": "v1.0.0",
  17. "Info": "/Users/zhaoweijie/go/pkg/mod/cache/download/github.com/qq1060656096/hellomod/@v/v1.0.0.info",
  18. "GoMod": "/Users/zhaoweijie/go/pkg/mod/cache/download/github.com/qq1060656096/hellomod/@v/v1.0.0.mod",
  19. "Zip": "/Users/zhaoweijie/go/pkg/mod/cache/download/github.com/qq1060656096/hellomod/@v/v1.0.0.zip",
  20. "Dir": "/Users/zhaoweijie/go/pkg/mod/github.com/qq1060656096/hellomod@v1.0.0",
  21. "Sum": "h1:O66u/mTlM4cHHdwuKPNpUBmJor2XOv0Wa0j+qfOwAN4=",
  22. "GoModSum": "h1:TOAQUVNcJP1uykhVNbIcfTsdYdjs2zrIYEtpAGWpcqg="
  23. }
  24. edit 提供命令来编辑go.mod文件, 主要用于工具或脚本
  25. usage: go mod edit [editing flags] [go.mod]
  26. 用法: go mod edit [editing flags] [go.mod]
  27. 可选参数:
  28. -fmt 只会格式化go.mod文件
  29. -module 更改模块路径
  30. -require=path@version 添加模块依赖
  31. 示例:
  32. # 添加hellomod模块v1.0.0版本
  33. go mod edit -require=github.com/qq1060656096/hellomod@v1.0.0
  34. -droprequire=path 删除模块依赖
  35. 示例:
  36. # 删除hellomod模块
  37. go mod edit -droprequire=github.com/qq1060656096/hellomod
  38. -exclude=path@version 排查模块
  39. # 排除hellomod模块v1.0.0版本
  40. go mod edit -exclude=github.com/qq1060656096/hellomod@v1.0.0
  41. -dropexclude=path@version 删除排除的模块(恢复排除的模块)
  42. # 恢复排除hellomod模块v1.0.0版本
  43. go mod edit -dropexclude=github.com/qq1060656096/hellomod@v1.0.0
  44. -replace=old[@v]=new[@v] 替换模块
  45. 示例:
  46. # hellomod模块v1.0.0版本替换成v2.0.0版本
  47. go mod edit -replace=github.com/qq1060656096/hellomod@v1.0.0=github.com/qq1060656096/hellomod@v2.0.0
  48. -dropreplace=old[@v]
  49. -print 打印结果,不会操作go.mod文件
  50. -json json格式打印结果,不会操作go.mod文件
  51. graph 打印模块需求图
  52. usage: go mod graph
  53. 用法: go mod graph
  54. init 在当前⽂件夹下初始化⼀个新的模块(创建go.mod⽂件)
  55. usage: go mod init [module]
  56. 用法: go mod init [模块名]
  57. 示例:
  58. # 创建“github.com/qq1060656096/hellomod”模块
  59. go mod init github.com/qq1060656096/hellomod
  60. tidy 整理模块(增加缺少的模块,删除未⽤的模块)
  61. usage: go mod tidy [-v]
  62. 用法: go mod tidy [-v]
  63. 可选参数:
  64. -v 打印已经删除的模块信息
  65. 示例:
  66. # 整理模块,并打印已经删除的模块
  67. go mod tidy -v
  68. vendor 将依赖复制到vendor
  69. usage: go mod vendor [-v]
  70. 用法: go mod vendor [-v]
  71. 可选参数:
  72. -v 打印复制到vendor的所有包和模块
  73. 示例:
  74. # 打印复制到vendor的所有包和模块
  75. go mod vendor -v
  76. verify 校验依赖的HASH码,验证检查当前模块的依赖, 如果依赖本有更改就使用之前的, 如果所有模块都没有更改,就打印"all modules verified
  77. ", 否则就报告(打印)已更改的模块
  78. usage: go mod verify
  79. 用法: go mod verify
  80. 示例:
  81. go mod verify
  82. why 解释为什么需要依赖
  83. usage: go mod why [-m] [-vendor] packages...
  84. 用法: go mod why [-m] [-vendor] packages...
  85. 可选参数
  86. -vendor
  87. -m

run 编译并运行Go程序

  1. run 命令 编译并运行Go程序
  2. usage: go run [build flags] [-exec xprog] package [arguments...]
  3. 用法: go run [编译 flags] [-exec xprog] [arguments...]
  4. 可选参数: 其他参数请参考(go help build)
  5. -exec
  6. 示例:
  7. # 运行maing.go
  8. go run main.go
  9. # 运行maing.go并开启竞态检测(开发时建议开启这个选项)
  10. go run -race main.go

test 测试包

  1. go test 用于测试包
  2. usage: go test [build/test flags] [packages] [build/test flags & test binary flags]
  3. -c 把包编译二进制测试包, 注意不会运行, 需要你手动执行二进制测试
  4. 示例:
  5. go test -c package_import_path
  6. go test -c 包的导入路径
  7. 1. go test -c 在当前目录生成二进制测试
  8. 2. go test -c go test -c go-tutorials/8/examples/demo1
  9. -exec 运行二进制测试
  10. 示例:
  11. go test -c -exec demo1.test
  12. -json 运行测试,并将结果输出为json格式
  13. 示例:
  14. go test -json path
  15. 1. go test -json 测试当前包
  16. 2. go test -json ./
  17. -o 把测试编译成自己命名二进制包, 默认仍然会运行测试(除非指定-c或者-i)
  18. 示例:
  19. go test -o file_name
  20. go test -o 文件名
  21. 1. go test -o demo1.custom_name.test
  22. -bench 运行基准测试, 默认情况下不运行
  23. 示例:
  24. go test -bench regexp
  25. go test -bench 正则表达式
  26. 1. go test -bench 运行所有基准测试
  27. 2. go test -bench=. 运行所有基准测试
  28. 3. go test -bench=hah 运行指定的基准测试
  29. -benchtime 基准测试,持续时间(默认1秒)
  30. -count 运行测试次数
  31. 示例:
  32. go test -count n
  33. go test -count 次数
  34. 1. go test -count 10 运行所有的测试10
  35. -cover 覆盖率统计, 注意覆盖率统计是通过代码注释来工作的
  36. -cpu 指定测试cpu数量
  37. 示例:
  38. go test -cpu 1,2,4
  39. go test -cpu cpu数量
  40. 1. go test -cpu 8 指定8cpu
  41. -list regexp 列出匹配的测试
  42. 示例:
  43. go test -list regexp
  44. go test -list 正则表达式
  45. 1. go test -list Login 列出demo1中的测试
  46. -v 详细输出运行时记录所有的测试
  47. 示例:
  48. go test -v

tool 运行指定的go工具

  1. tool 命令 运行指定的go工具
  2. usage: go tool [-n] command [args...]
  3. 用法: go tool [-n] 命令 [args...]
  4. 可选参数:
  5. -n 打印要执行的命令, 但是不真正的执行
  6. 示例:
  7. # 打印vet工具执行的命令
  8. go tool -n vet

go tool 工具列表

  1. # go tool: 列表工具列表
  2. # go tool 工具 -h: 查看工具帮助文档
  3. # 查看vet工具帮助文档: go tool vet -h
  4. addr2line
  5. api
  6. asm
  7. buildid
  8. cgo
  9. compile
  10. cover
  11. dist
  12. doc
  13. fix
  14. link
  15. nm
  16. objdump
  17. pack
  18. pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU 消耗、内存分配及阻塞分析
  19. test2json
  20. trace
  21. vet 报告包中可能出现的错误,开发时建议使用这个工具(fmt printf函数参数不对或者声明结构体 tag声明不对等)

version 查看当前go语言版本

  1. version 查看go当前的版本
  2. usage: go version
  3. 示例:
  4. # 查看go当前的版本
  5. go version

vet 报告包中可能出现的错误

  1. vet 静态检查工具,报告包中可能出现的错误, 开发时建议使用这个工具(fmt printf函数参数不对或者声明结构体 tag声明不对等)
  2. usage: go vet [-n] [-x] [build flags] [vet flags] [packages]
  3. 用法: go vet [-n] [-x] [编译参数] [vet flags] [包]
  4. 可选参数:
  5. -n 打印要执行的命令, 但是不真正的执行
  6. -x 打印执行的命令
  7. 更多参数请参考(go help build)
  8. 示例:
  9. # 检测 testmod 包中可能存在的问题
  10. go vet testmod