go:generate 指令
gogenerate 指令
go generate 命令是在Go語言 1.4 版本里面新添加的一個命令,當(dāng)運行該命令時,它將掃描與當(dāng)前包相關(guān)的源代碼文件,找出所有包含 //go:generate 的特殊注釋,提取并執(zhí)行該特殊注釋后面的命令。
命令格式
go generate 命令格式如下所示:
go generate [-run regexp] [-n] [-v] [-x] [command] [build flags] [file.go... | packages]
參數(shù)說明如下:
-run正則表達(dá)式匹配命令行,僅執(zhí)行匹配的命令;-v輸出被處理的包名和源文件名;-n顯示不執(zhí)行命令;-x顯示并執(zhí)行命令;command可以是在環(huán)境變量 PATH 中的任何命令。
注意:
//go:generate注釋雙斜線后沒有空格;- 每個源碼文件可以包含多個 generate 特殊注釋;
- 運行
go generate命令時,才會執(zhí)行特殊注釋后面的命令; - 當(dāng)
go generate命令執(zhí)行出錯時,將終止程序的運行; go generate后可以接任意路徑。比如go generate命令只處理當(dāng)前工作目錄下的包;而go generate ./..則處理當(dāng)前目錄的父目錄及其所有子目錄下的包。所有go generate命令都會忽略vendor目錄和GOROOT下的包,僅處理項目內(nèi)的用戶代碼。
常見用途
示例:https://gitee.com/meha555/go-learn/tree/master/01_basic/tricks/generate
- Protocol Buffers: 從.proto文件生成Go代碼
- Mock生成: 為接口生成mock實現(xiàn)
- 字符串方法: 為枚舉類型生成String()方法
- 嵌入資源: 將靜態(tài)資源嵌入到Go代碼中
- 版本信息: 生成包含版本信息的代碼

浙公網(wǎng)安備 33010602011771號