protoc-gen-validate 簡介與使用指南
✅ 什麼是 protoc-gen-validate
protoc-gen-validate(簡稱 PGV)是一個 Protocol Buffers 外掛程式(plugin),用於**在產生的 Go 程式碼中新增結構體(struct)欄位的驗證邏輯**。
它透過在 .proto 檔案中新增 validate 規則,自動為每個欄位產生驗證程式碼,避免你手動撰寫驗證邏輯。
🌟 範例
syntax = "proto3";
import "validate/validate.proto";
message User {
string name = 1 [(validate.rules).string.min_len = 3];
int32 age = 2 [(validate.rules).int32.gte = 18];
}
產生後的 Go 程式碼中會自動包含:
user := &User{Name: "Tom", Age: 16}
if err := user.Validate(); err != nil {
// err 會指出字段不符合要求
}
✅ 支援的驗證規則類型
string:min_len,max_len,email,ip,uri,pattern等number:gte,lte,lt,gtrepeated:min_items,unique,items rulesmap:min_pairs,keys rules,values rulesmessage: 巢狀驗證oneof: 子欄位驗證required: 欄位是否必須
✅ 支援語言
- Go(官方最強支援)
- C++
- Java
- Python
- C#
- Rust(透過社群外掛程式)
✅ 成熟度與使用建議
| 項目 | 說明 |
|---|---|
| 成熟度 | 非常成熟,在許多微服務(microservice)專案中廣泛使用(如 buf.build 生態系) |
| 社群支援 | 擁有活躍社群,已由原始作者轉移到 bufbuild 維護 |
| 與其他工具相容 | 完美支援 protoc-gen-go,可搭配 buf, grpc-gateway, govalidator 等使用 |
| 適用情境 | 伺服器端欄位校驗、API 請求校驗、微服務(microservice)介面參數校驗 |
🛠 使用步驟(簡要)
- 安裝外掛程式:
go install github.com/bufbuild/protoc-gen-validate@latest
- 下載 PGV 所需的 proto 檔案定義:
git clone https://github.com/bufbuild/protoc-gen-validate
或使用 buf registry 引用:buf.build/buf/validate
- 編譯指令:
protoc \
--proto_path=./proto \
--go_out=. \
--go-grpc_out=. \
--validate_out=lang=go:. \
your_file.proto
📦 常見替代方案
| 工具 | 簡介 |
|---|---|
| cel | Google 出品的表達式語言,可用於 proto 校驗,但複雜度略高 |
| 手動撰寫驗證 | 彈性但重複性高,容易出錯 |
go-playground/validator |
通用 Go struct 校驗工具,不依賴 proto |
✅ 總結
protoc-gen-validate 是一個**成熟、穩定、易用**的 protobuf 欄位驗證方案,特別適合:
- 微服務(microservice)架構中的參數校驗
- 自動產生驗證邏輯
- 希望減少手動撰寫重複驗證的專案團隊
主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/4461