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

相關推薦

  • Go工程師體系課 017

    限流、熔斷與降級入門(含 Sentinel 實戰) 結合課件第 3 章(3-1 ~ 3-9)的視頻要點,整理一套面向初學者的服務保護指南,幫助理解“爲什麼需要限流、熔斷和降級”,以及如何用 Sentinel 快速上手。 學習路線速覽 3-1 理解服務雪崩與限流、熔斷、降級的背景 3-2 Sentinel 與 Hystrix 對比,明確技術選型 3-3 Sen…

  • Go工程師體系課 008

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

  • Go工程師體系課 013

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

  • Go工程師體系課 004

    需求分析 後臺管理系統 商品管理 商品列表 商品分類 品牌管理 品牌分類 訂單管理 訂單列表 用戶信息管理 用戶列表 用戶地址 用戶留言 輪播圖管理 電商系統 登錄頁面 首頁 商品搜索 商品分類導航 輪播圖展示 推薦商品展示 商品詳情頁 商品圖片展示 商品描述 商品規格選擇 加入購物車 購物車 商品列表 數量調整 刪除商品 結算功能 用戶中心 訂單中心 我的…

    12小時前
    100
  • Go工程師體系課 016

    Kubernetes 入門 —— Go 微服務部署與編排 一、Kubernetes 核心概念 1.1 什麼是 Kubernetes Kubernetes(簡稱 K8s)是 Google 開源的容器編排平臺,用於自動化部署、擴展和管理容器化應用。如果說 Docker 解決了"如何打包和運行單個容器"的問題,那麼 K8s 解決的是"如何管理成百上千個容器"的問題…

    後端開發 30分鐘前
    000
簡體中文 繁體中文 English