Go工程師體系課 protoc-gen-validate

protoc-gen-validate 簡介與使用指南

✅ 甚麼是 protoc-gen-validate

protoc-gen-validate(簡稱 PGV)是一個 Protocol Buffers 插件,用於在生成的 Go 代碼中添加結構體字段的驗證邏輯

它通過在 .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, gt
  • repeated: min_items, unique, items rules
  • map: min_pairs, keys rules, values rules
  • message: 嵌套驗證
  • oneof: 子字段驗證
  • required: 字段是否必須

✅ 支持語言

  • Go(官方最強支持)
  • C++
  • Java
  • Python
  • C#
  • Rust(通過社區插件)

✅ 成熟度與使用建議

項目 說明
成熟度 非常成熟,在很多微服務項目中廣泛使用(如 buf.build 生態)
社區支持 擁有活躍社區,已由原始作者轉移到 bufbuild 維護
與其他工具兼容 完美支持 protoc-gen-go,可搭配 buf, grpc-gateway, govalidator 等使用
適用場景 服務端字段校驗、API 請求校驗、微服務接口參數校驗

🛠 使用步驟(簡要)

  1. 安裝插件:
go install github.com/bufbuild/protoc-gen-validate@latest
  1. 下載 PGV 所需的 proto 文件定義:
git clone https://github.com/bufbuild/protoc-gen-validate

或使用 buf registry 引用:buf.build/buf/validate

  1. 編譯命令:
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 字段驗證方案,特別適合:

  • 微服務架構中的參數校驗
  • 自動生成驗證邏輯
  • 希望減少手寫重復驗證的項目團隊

主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/6728

(0)
Walker的頭像Walker
上一篇 2026年3月6日 03:30
下一篇 2026年3月6日 02:30

相關推薦

  • Go工程師體系課 010

    es 安裝 elasticsearch(理解為庫) kibana(理解為連接工具)es 和 kibana(5601) 的版本要保持一致 MySQL 對照學習 Elasticsearch(ES) 術語對照 MySQL Elasticsearch database index(索引) table type(7.x 起固定為 _doc,8.x 徹底移除多 type…

    後端開發 2026年3月7日
    11200
  • Go工程師體系課 013

    訂單事務 先扣庫存 後扣庫存 都會對庫存和訂單都會有影響, 所以要使用分布式事務 業務(下單不對付)業務問題 支付成功再扣減(下單了,支付時沒庫存了) 訂單扣減,不支付(訂單超時歸還)【常用方式】 事務和分布式事務 1. 甚麼是事務? 事務(Transaction)是數據庫管理系統中的一個重要概念,它是一組數據庫操作的集合,這些操作要麼全部成功執行,要麼全部…

    後端開發 2026年3月7日
    10600
  • 日積月累 電子書目錄與推薦

    Go 語言電子書分類目錄與推薦 電子書來源目錄:/Users/walker/Downloads/www.zxit8.com_017—電子書/共計 48 份資料(47 個編號 PDF + 1 本獨立命名 Go語言實戰 + 1 份源碼 zip)整理時間:2026-03-06 本目錄對全部電子書按主題分類並給出推薦度評級,幫助讀者根據自身水平和需求選擇合適的學習材…

    後端開發 2026年3月7日
    11000
  • Go工程師體系課 002

    GOPATH 與 Go Modules 的區別 1. 概念 GOPATH 是 Go 的早期依賴管理機制。 所有的 Go 項目和依賴包必須放在 GOPATH 目錄中(默認是 ~/go)。 一定要設置 GO111MODULE=off 項目路徑必須按照 src/包名 的結構組織。 不支持版本控制,依賴管理需要手動處理(例如 go get)。 查找依賴包的順序是 g…

    2026年3月7日
    11200
  • Go工程師體系課 003

    grpc grpc grpc-go grpc 無縫集成了 protobuf protobuf 習慣用 Json、XML 數據存儲格式的你們,相信大多都沒聽過 Protocol Buffer。 Protocol Buffer 其實是 Google 出品的一種輕量 & 高效的結構化數據存儲格式,性能比 Json、XML 真的強!太!多! protobuf…

    後端開發 2026年3月7日
    10600
簡體中文 繁體中文 English