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
上一篇 11小時前
下一篇 1天前

相關推薦

  • Go工程師體系課 001

    轉型 想在短時間系統轉到Go工程理由 提高CRUD,無自研框架經驗 拔高技術深度,做專、做精需求的同學 進階工程化,擁有良好開發規範和管理能力的 工程化的重要性 高級開的期望 良好的代碼規範 深入底層原理 熟悉架構 熟悉k8s的基礎架構 擴展知識廣度,知識的深度,規範的開發體系 四個大的階段 go語言基礎 微服務開發的(電商項目實戰) 自研微服務 自研然後重…

  • Go工程師體系課 018

    API 網關與持續部署入門(Kong & Jenkins) 對應資料目錄《第 2 章 Jenkins 入門》《第 3 章 通過 Jenkins 部署服務》,整理 Kong 與 Jenkins 在企業級持續交付中的實戰路徑。即便零基礎,也能順著步驟搭建出自己的網關 + 持續部署流水線。 課前導覽:甚麼是 API 網關 API 網關位於客戶端與後端微服務…

  • Go工程師體系課 008

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

    後端開發 6小時前
    000
  • 編程基礎 0010_Go底層原理與源碼精華

    Go 底層原理與源碼精華 基於《Go 源碼剖析》(雨痕, 第五版下冊)、《Go 1.4 runtime》、《Go 學習筆記 第四版》、《Golang 性能優化》、《Go Execution Modes》等資料整理,並補充現代 Go 版本的變化。 一、Go 編譯器與鏈接器 1.1 編譯流程概覽 Go 的編譯過程分為以下階段: 源碼 (.go) --> 詞…

    後端開發 18小時前
    400
  • Go工程師體系課 014

    rocketmq 快速入門 去我們的各種配置(podman)看是怎麼安裝的 概念介紹 RocketMQ 是阿里開源、Apache 頂級項目的分布式消息中間件,核心組件: NameServer:服務發現與路由 Broker:消息存儲、投遞、拉取 Producer:消息生產者(發送消息) Consumer:消息消費者(訂閱並消費消息) Topic/Tag:主題/…

簡體中文 繁體中文 English