Go语言go generate命令的用法(新手必看)
go generate 命令是在 Go 语言 1.4 版本里新增的命令,用于扫描与当前包相关的源代码文件,找出所有包含 //go:generate 的特殊注释,提取并执行该特殊注释后面的命令。
在使用 go generate 命令时,需要注意以下几点:
在下面这些场景中,使用 go generate 命令:
go generate 命令的语法格式如下:
当执行 go generate 命令时,还可以使用如下所示的环境变量:
在使用 go generate 命令时,需要注意以下几点:
- 该特殊注释必须在 .go 源码文件中;
- 每个源码文件可以包含多个 generate 特殊注释;
- 只有在运行 go generate 命令时,才执行特殊注释后面的命令;
- 当 go generate 命令执行出错时,终止程序的运行;
- 特殊注释必须以 //go:generate 开头,双斜线后面没有空格。
在下面这些场景中,使用 go generate 命令:
- yacc:从 .y 文件生成 .go 文件;
- protobufs:从 protocol buffer 定义文件(.proto)生成 .pb.go 文件;
- Unicode:从 UnicodeData.txt 生成 Unicode 表;
- HTML:将 HTML 文件嵌入到 go 源码;
- bindata:将类似 JPEG 的文件转成 go 代码中的字节数组。
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:当前处理文件的包名;
- $DOLLAR:固定的 $,不清楚具体用途。