bufbuild/protovalidate-go

GitHub: bufbuild/protovalidate-go

Stars: 474 | Forks: 30

[![The Buf logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/82f0b8ee85235929.svg)][buf] # protovalidate-go [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/992f32b885235930.svg)](https://github.com/bufbuild/protovalidate-go/actions/workflows/ci.yaml) [![Conformance](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/005a80d706235931.svg)](https://github.com/bufbuild/protovalidate-go/actions/workflows/conformance.yaml) [![Report Card](https://goreportcard.com/badge/buf.build/go/protovalidate)](https://goreportcard.com/report/buf.build/go/protovalidate) [![GoDoc](https://pkg.go.dev/badge/buf.build/go/protovalidate.svg)](https://pkg.go.dev/buf.build/go/protovalidate) [![BSR](https://img.shields.io/badge/BSR-Module-0C65EC)][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分析