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://www.walker-learn.xyz/archives/6728

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

相關推薦

  • Go日積月累 電子書目錄與推薦

    Go 語言電子書精華整理與推薦 基於 48 份 Go 語言電子書資料,按主題提煉爲 4 篇系統化精華文檔。整理時間:2026-03-06 精華文章導讀 以下 4 篇文章從 48 份電子書中提煉核心知識,按主題系統化整理,覆蓋 Go 語言從底層原理到企業實戰的完整知識體系。 1. Go 底層原理與源碼精華 知識來源:《Go 源碼剖析》(雨痕)、《Go 1.4 …

    後端開發 2026年3月6日
    12500
  • Go工程師體系課 008

    訂單及購物車 先從庫存服務中將 srv 的服務代碼框架複製過來,查找替換對應的名稱(order_srv) 加密技術基礎 對稱加密(Symmetric Encryption) 原理: 使用同一個密鑰進行加密和解密 就像一把鑰匙,既能鎖門也能開門 加密速度快,適合大量數據傳輸 使用場景: 本地文件加密 數據庫內容加密 大量數據傳輸時的內容加密 內部系統間的快速通…

    後端開發 2026年3月7日
    6900
  • Go資深工程師講解(慕課) 001

    概覽 下載開發: vi emacs idea eclipse vs sublimeIde: GoLand,liteIDE默認 gopath ~/go/src 基本語法 變量定義使用 var,函數外定義可以使用括號的方式 package main import "fmt" //函數外定義要使用var var aa=3 var ss=&quo…

    2026年3月6日
    7300
  • 日積月累 電子書目錄與推薦

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

    後端開發 2026年3月7日
    7200
  • Go資深工程師講解(慕課) 006_函數式編程

    Go 函數式編程 對應視頻 Ch6(6-2 函數式編程例一),在 002.md 基礎上擴展更多函數式編程模式 1. 回顧:Go 中函數是一等公民 Go 不是純函數式語言,但函數可以作爲:- 變量- 參數- 返回值- 存放在數據結構中 // 函數作爲變量 var add = func(a, b int) int { return a + b } // 函數作爲…

    後端開發 2026年3月6日
    7800
簡體中文 繁體中文 English