go generate命令是在Go语言 1.4 版本里面新添加的一个命令,当运行该命令时,它将扫描与当前包相关的源代码文件,找出所有包含//go:generate的特殊注释提取并执行该特殊注释后面的命令。

1.示例

//go:generate tools gen enum TestState
type TestState int8

tools是公司内部工具,用于生成枚举方法与其他数据库访问方法等等。

2.使用

2.1 手动执行

对于上述tools工具,可以cd到具体目录下,手动执行:

cd constants/types
tools gen enum TestState

2.2 命令行执行

go generate登场

cd constants/types
go generate
2021/08/01 18:37:00 costs 3085 ms
2021/08/01 18:37:07 costs 6112 ms
2021/08/01 18:37:11 costs 4267 ms
2021/08/01 18:37:15 costs 3867 ms
2021/08/01 18:37:19 costs 3314 ms
2021/08/01 18:37:22 costs 3163 ms
2021/08/01 18:37:27 costs 4567 ms
2021/08/01 18:37:31 costs 4072 ms
2021/08/01 18:37:34 costs 3285 ms
2021/08/01 18:37:38 costs 3578 ms

这样根本看不出到底执行到哪个命令了

go generate -x

命令中使用的-x参数会将执行的具体命令同时打印出来。

2.3 vscode中执行

没有用过goland,一直使用的是vscode进行开发。博主发现vscode会自动发现//go:generate注释,然后生成 一键执行

image-20210801184406475

便会自动执行上一小节的命令,在vscode下面输出tab中持续输出具体的执行命令与结果。

image-20210801184727529