https://www.cnblogs.com/itogo/p/8645441.html
go命令教程

image.png

build 编译文件

go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。
go build -mod=vendor vendor模式编译代码

常用选项

-o 执行编译输出的文件名
-i 编译过程中会安装 还没 安装的依赖包
-work 打印编译时生成的临时工作目录路径,并且在编译结束后保留,默认情况时删除的
-race 检查是否有并发安全的代码
image.png

无参数编译: go build

image.png
编译当前目录下的所有go文件,生成可执行文件
如果只有库文件和测试文件,是不生成任何文件的
文件名是gobuild(与项目名相同)

文件列表编译:go build xxx xxx xxx

默认编译输出的名字为第一个文件参数的名字
只编译指定的文件
注意:所有文件的包都必须是同一个包

包编译:go build 包名(module名)

包名是相对于 GOPATH 下的 src 目录开始的
go build -o main.exe chapter11/goinstall
image.png

list 用于输出路径包的详细信息

-e 容错模式加载代码包,如果有错误就不会打印错误信息
go list -m all (列出项目中的所有依赖)

go list

image.png

go list ./…

image.png

go list -json 列出项目的详细信息

image.png

install 安装可执行文件到bin目录

跟build命令类似,build命令把编译后的产物放在当前目录
而install是把编译后的可执行文件放在了GOPATH下的bin目录下
编译期间的中间文件放在pkg目录下

clean 清除编译生成的文件

一般都是利用go clean命令清除编译文件,然后再将源码递交到 github 上,方便对于源码的管理
清除的文件包括:
go build生成的可执行文件
go test -c 生成的文件
go install 安装代码包时产生的结果文件

一些选项:

  • -i 清除关联的安装的包和可运行文件,也就是通过go install安装的文件;
  • -n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的;(实用)
  • -r 循环的清除在 import 中引入的包;
  • -x 打印出来执行的详细命令,其实就是 -n 打印的执行版本;
  • -cache 删除所有go build命令的缓存
  • -testcache 删除当前包所有的测试结果

get 下载并install

只用go get xxx 如果包已经存在的话就不会进行下载,需加-u
get分支:go get ksogit.kingsoft.net/wpadmin/lib@func_org_sync_group
get版本:go get ksogit.kingsoft.net/wpadmin/lib@1.1.1

  • -d 只下载不安装
  • -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
  • -fix 在获取源码之后先运行 fix,然后再去做其他的事情
  • -t 同时也下载需要为运行测试所需要的包
  • -u 强制使用网络去更新包和它的依赖包
  • -v 显示执行的命令
  • -insecure 允许使用不安全的http方式进行下载操作

image.png

test

https://www.liwenzhou.com/posts/Go/16_test/#autoid-1-0-0
常用选项:
-v 展示详细输出
-run=xxx 对应一个正则表达式,运行指定名字的单元测试
-cover 显示测试覆盖率
-coverprofile=xxxx 将测试覆盖率记录输出到一个文件(与-cover配合使用)
go tool cover -html=xxx : 用tool工具查看测试覆盖率
-bench=xxx 或者 -bench=. 执行指定的基准测试
-benchmem 获取内存分配的统计数据 (与-bench一起使用)
-benchtime=3s 默认基础测试是一秒的时间,可以修改测试时间
resettimer表示现在开始计算基准测试的时间,不把准备自愿的时间算在测试时间里面,还有startimer和stoptimer

pprof 性能分析命令

image.png
开启内存统计,输出每次操作的内存分配次数和内存大小
image.png
并发基准测试
image.png

  1. 单独go test 某个测试文件xx_test.go的时候可能会失败,因为xx_test.go以来了其他的文件

所以可以 go test xx_test.go xxxx.go

mod

go mod常用命令 以及 常见问题
image.png
go mod tidy : 下载依赖库,go.mod去掉不相关的库,增加缺失的包,移除没用的包
go mod download 下载模块到本地缓存,缓存路径是 $GOPATH/pkg/mod/cache
go mod edit 是提供了命令版编辑 go.mod 的功能,例如 go mod edit -fmt go.mod 会格式化 go.mod
go mod graph 把模块之间的依赖图显示出来
go mod init 初始化模块(例如把原本dep管理的依赖关系转换过来)
go mod vendor 把依赖拷贝到 vendor/ 目录下
go mod verify 确认依赖关系
go mod why 解释为什么需要包和模块
go mod vendor 把项目的依赖库放在项目的vendor文件夹下

vet 静态代码检查命令

go tool vet help 查看vet内置的linter检查

doc 查看文件注释,接口等

go doc xxx

generate

扫描源码,找出所有包含 // go:generate的特殊注释,并且执行注释后的命令
在代码中执行其他命令
image.png

image.png

其他小工具

git clone https://github.com/golang/tools

stringer 并非官方自带工具

go install golang.org/x/tools/cmd/stringer
golang stringer 妙用