功能
当运行go generate
命令时,它将扫描与当前包相关的源代码文件,找出所有包含//go:generate
的特殊注释,提取并执行该特殊注释后面的命令。
使用场景
需要支持在程序运行时,通过命令制式执行操作的时候
注意事项
- 该特殊注释必须在
.go
源码文件中 - 每个源码文件可以包含多个
generate
特殊注释 - 运行
go generate
命令时,才会执行特殊注释后面的命令 - 当
go generate
命令执行出错时,将终止程序的运行 - 特殊注释必须以
//go:generate
开头,双斜线后面没有空格
使用
go generate [-run regexp] [-n] [-v] [-x] [command] [build flags] [file.go... | packages]
-
参数
-run 正则表达式匹配命令行,仅执行匹配的命令;
-v 输出被处理的包名和源文件名;
-n 显示不执行命令;
-x 显示并执行命令;
command 可以是在环境变量 PATH 中的任何命令。 -
go generate
使用时支持的环境变量环境变量 含义 $GOARCH 体系架构(arm、amd64 等) $GOOS 当前的 OS 环境(linux、windows 等) $GOFILE 当前处理中的文件名 $GOLINE 当前命令在文件中的行号 $GOPACKAGE 当前处理文件的包名
使用案例
- 写测试文件
test.go
,并增加//go:generate
命令注释行package test //go:generate mockgen --source=$GOFILE --package=$GOPACKAGE --destination=mock_test.go dependency type MyInter interface { GetName(id int) string } func GetUser(m MyInter, id int) string { user := m.GetName(id) return user }
- 终端执行命令
go generate
- 自动生成
mock_test.go
文件 - 后续执行
mock
测试,详细见连接