[golang]自動生成範式(模板)程式
在 Golang 中,自動生成範式(模板)程式的方式有幾種,取決於你的需求,例如:
- 使用
go generate(標準方式) - 使用
text/template或html/template(基於模板的生成) - 使用
go:embed(嵌入模板文件) - 使用代碼生成工具(如
stringer、gomock、ent等) - 使用 AI/LLM 工具(生成重複性較高的程式碼)
1. 使用 go generate 自動生成程式碼
go generate 是 Go 內建的生成工具,允許在程式中自動執行命令來生成代碼。
範例:生成 Getter 方法
假設我們有一個 Person 結構體,我們想自動生成 GetName() 和 GetAge() 方法。
步驟 1:建立 person.go
步驟 2:建立 gen_person.go 來生成程式碼
步驟 3:執行 go generate
執行後,會生成 person_gen.go,內容如下:
這種方式適用於自動生成簡單的 getter/setter 或其他重複性代碼。
2. 使用 text/template 生成程式碼
Go 提供 text/template 和 html/template,可以用來生成程式碼。
範例:使用模板生成 CRUD 代碼
執行:
生成 user_gen.go:
這種方式適用於自動生成結構體、API 處理函數等。
3. 使用 go:embed 讀取模板文件
如果你的模板存放在文件中,可以用 go:embed 來讀取。
範例:從外部模板生成代碼
建立 template.txt:
Go 代碼:
這樣,模板可以外部管理,方便調整。
4. 使用 stringer 自動生成字串方法
stringer 是 Go 官方工具,可為 const 生成 String() 方法。
範例:自動生成 String() 方法
建立 color.go:
執行:
生成 color_string.go:
這對於 enum 類型很有用。
5. 使用 gomock 生成測試 Mock
如果你使用 gomock 來測試,可以自動生成 mock 類:
這樣可以自動生成 Mock 類,減少手動編寫的工作。
結論
| 方法 | 適用場景 |
|---|---|
go generate | 任何基於 Go 程式自動生成的代碼 |
text/template | 根據模板生成結構體、CRUD 代碼 |
go:embed | 讀取外部模板,提高靈活性 |
stringer | 自動生成 String() 方法 |
gomock | 生成測試用 mock |
如果你是要自動生成 API、資料庫 CRUD 或 RPC 服務,可以考慮 ent ORM 或 protobuf 等工具。
留言
張貼留言