gogenerate 指令
go generate
命令是在Go语言 1.4 版本里面新添加的一个命令,当运行该命令时,它将扫描与当前包相关的源代码文件,找出所有包含 //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
注释双斜线后没有空格;- 每个源码文件可以包含多个 generate 特殊注释;
- 运行
go generate
命令时,才会执行特殊注释后面的命令; - 当
go generate
命令执行出错时,将终止程序的运行; go generate
后可以接任意路径。比如go generate
命令只处理当前工作目录下的包;而go generate ./..
则处理当前目录的父目录及其所有子目录下的包。所有go generate
命令都会忽略vendor
目录和GOROOT
下的包,仅处理项目内的用户代码。
常见用途
示例:https://gitee.com/meha555/go-learn/tree/master/01_basic/tricks/generate
- Protocol Buffers: 从.proto文件生成Go代码
- Mock生成: 为接口生成mock实现
- 字符串方法: 为枚举类型生成String()方法
- 嵌入资源: 将静态资源嵌入到Go代码中
- 版本信息: 生成包含版本信息的代码