protoc-gen-validate Introduction and Usage Guide
✅ What is protoc-gen-validate
protoc-gen-validate (PGV for short) is a Protocol Buffers plugin used to add validation logic for struct fields in generated Go code.
It automatically generates validation code for each field by adding validate rules in .proto files, saving you from writing validation logic manually.
🌟 Example
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];
}
The generated Go code will automatically include:
user := &User{Name: "Tom", Age: 16}
if err := user.Validate(); err != nil {
// err 会指出字段不符合要求
}
✅ Supported Validation Rule Types
string:min_len,max_len,email,ip,uri,patternetc.number:gte,lte,lt,gtrepeated:min_items,unique,items rulesmap:min_pairs,keys rules,values rulesmessage: nested validationoneof: sub-field validationrequired: field requiredness
✅ Supported Languages
- Go (strongest official support)
- C++
- Java
- Python
- C#
- Rust (via community plugin)
✅ Maturity and Usage Recommendations
| Item | Description |
|---|---|
| Maturity | Very mature, widely used in many microservice projects (e.g., buf.build ecosystem) |
| Community Support | Has an active community, maintenance has been transferred from the original author to bufbuild |
| Compatibility with other tools | Perfectly supports protoc-gen-go, can be used with buf, grpc-gateway, govalidator, etc. |
| Applicable Scenarios | Server-side field validation, API request validation, microservice interface parameter validation |
🛠 Usage Steps (Brief)
- Install the plugin:
go install github.com/bufbuild/protoc-gen-validate@latest
- Download the proto file definitions required by PGV:
git clone https://github.com/bufbuild/protoc-gen-validate
Or use buf registry reference: buf.build/buf/validate
- Compile command:
protoc \
--proto_path=./proto \
--go_out=. \
--go-grpc_out=. \
--validate_out=lang=go:. \
your_file.proto
📦 Common Alternatives
| Tool | Introduction |
|---|---|
| cel | An expression language from Google, can be used for proto validation, but slightly higher complexity |
| Manual validation | Flexible but repetitive and prone to errors |
go-playground/validator |
General Go struct validation tool, not dependent on proto |
✅ Summary
protoc-gen-validate is a mature, stable, and easy-to-use protobuf field validation solution, especially suitable for:
- Parameter validation in microservice architectures
- Automatic generation of validation logic
- Project teams looking to reduce manual, repetitive validation
主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://walker-learn.xyz/archives/4461