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/4461

(0)
Walker的头像Walker
上一篇 2025年11月25日 17:00
下一篇 2025年11月24日 00:00

相关推荐

  • TS珠峰 004【学习笔记】

    类型体操 type-1 // 内置 // Partial Required Readonly 修饰类型的 // Pick Omit 处理数据结构 // Exclude Extract 处理集合类型的 // Paramters RetrunValue infer // 字符串类型,模板字符串`${}` + infer PartialPropsOptional …

    个人 2025年3月27日
    1.5K00
  • Go工程师体系课 006【学习笔记】

    项目结构说明:user-web 模块 user-web 是 joyshop_api 工程中的用户服务 Web 层模块,负责处理用户相关的 HTTP 请求、参数校验、业务路由以及调用后端接口等功能。以下是目录结构说明: user-web/ ├── api/ # 控制器层,定义业务接口处理逻辑 ├── config/ # 配置模块,包含系统配置结构体及读取逻辑 …

    个人 2025年11月25日
    30400
  • TS珠峰 002【学习笔记】

    泛型 /* * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git &a…

    个人 2025年3月27日
    1.6K00
  • Go工程师体系课 011【学习笔记】

    查询的倒排索引 1. 什么是倒排索引? 倒排索引(Inverted Index)是一种数据结构,用于快速查找包含特定词汇的文档。它是搜索引擎的核心技术之一。 1.1 基本概念 正排索引:文档 ID → 文档内容(词列表) 倒排索引:词 → 包含该词的文档 ID 列表 1.2 为什么叫"倒排"? 倒排索引将传统的"文档包含哪些词"的关系倒转为"词出现在哪些文档…

    个人 2025年11月25日
    28600
  • 深入理解ES6 004【学习笔记】

    扩展对象的功能 普通对象 具有js对象所有默认内部行为的 特异对象 具有某些与默认行为不符的内部行为 标准对象 es6规范中定义的对象,Array/Date等 内建对象 脚本开始执行时存在于javascript执行环境的对象,所有标准对象都是内建对象 对象字面量语法扩展 属性初始值的简写,当一个对象的属性与本地变量同名时,不必再写冒号和值 对象方法的简写语法…

    个人 2025年3月8日
    1.4K00
简体中文 繁体中文 English