bufbuild/protovalidate-go
GitHub: bufbuild/protovalidate-go
Stars: 474 | Forks: 30
[][buf]
# protovalidate-go
[](https://github.com/bufbuild/protovalidate-go/actions/workflows/ci.yaml)
[](https://github.com/bufbuild/protovalidate-go/actions/workflows/conformance.yaml)
[](https://goreportcard.com/report/buf.build/go/protovalidate)
[](https://pkg.go.dev/buf.build/go/protovalidate)
[][buf-mod]
[Protovalidate][protovalidate] is the semantic validation library for Protobuf. It provides standard annotations to validate common rules on messages and fields, as well as the ability to use [CEL][cel] to write custom rules. It's the next generation of [protoc-gen-validate][protoc-gen-validate].
With Protovalidate, you can annotate your Protobuf messages with both standard and custom validation rules:
syntax = "proto3";
package acme.user.v1;
import "buf/validate/validate.proto";
message User {
string id = 1 [(buf.validate.field).string.uuid = true];
uint32 age = 2 [(buf.validate.field).uint32.lte = 150]; // We can only hope.
string email = 3 [(buf.validate.field).string.email = true];
string first_name = 4 [(buf.validate.field).string.max_len = 64];
string last_name = 5 [(buf.validate.field).string.max_len = 64];
option (buf.validate.message).cel = {
id: "first_name_requires_last_name"
message: "last_name must be present if first_name is present"
expression: "!has(this.first_name) || has(this.last_name)"
};
}
Once you've added `protovalidate-go` to your project, validation is idiomatic Go:
if err = protovalidate.Validate(moneyTransfer); err != nil {
// Handle failure.
}
## Installation
To install the package, use `go get` from within your Go module:
go get buf.build/go/protovalidate
## Documentation
Comprehensive documentation for Protovalidate is available at [protovalidate.com][protovalidate].
Highlights for Go developers include:
* The [developer quickstart][quickstart]
* Comprehensive RPC quickstarts for [Connect][connect-go] and [gRPC][grpc-go]
* A [migration guide for protoc-gen-validate][migration-guide] users
API documentation for Go is available on [pkg.go.dev][pkg-go].
### Native standard validation rules
We continue to validate that the native rules and the CEL rules produce identical results. The `compliance` Makefile target has been updated to run twice,
once with the native rules enabled, and once with the CEL rules enabled.
## Additional languages and repositories
Protovalidate isn't just for Go! You might be interested in sibling repositories for other languages:
- [`protovalidate-java`][pv-java] (Java)
- [`protovalidate-python`][pv-python] (Python)
- [`protovalidate-cc`][pv-cc] (C++)
- [`protovalidate-es`][pv-es] (TypeScript and JavaScript)
Additionally, [protovalidate's core repository](https://github.com/bufbuild/protovalidate) provides:
- [Protovalidate's Protobuf API][validate-proto]
- [Conformance testing utilities][conformance] for acceptance testing of `protovalidate` implementations
## Legal
Offered under the [Apache 2 license][license].
标签:EVTX分析