go:generate 指令

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

  1. Protocol Buffers: 从.proto文件生成Go代码
  2. Mock生成: 为接口生成mock实现
  3. 字符串方法: 为枚举类型生成String()方法
  4. 嵌入资源: 将静态资源嵌入到Go代码中
  5. 版本信息: 生成包含版本信息的代码
posted @ 2025-10-13 23:55  3的4次方  阅读(11)  评论(0)    收藏  举报