插件地址
windows下安装
go install github.com/envoyproxy/protoc-gen-validate@latest
保证 @GOPATH/BIN 下有 protoc-gen-validate.exe
保存 validate.proto 文件
简单使用
syntax = "proto3"; option go_package=".;proto"; import "validate.proto"; service Greeter { rpc SayHello(StreamReqData) returns (StreamResData); } message StreamReqData { string data = 1 [(validate.rules).string.len = 5]; } message StreamResData { string data = 1 [(validate.rules).string.len = 5]; }
生成 *.pb.validate.go
protoc --validate_out="lang=go:." stream.proto
可在 server 端拦截器里做参数验证
// 拦截器逻辑 interceptor := func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { // 验证参数 p := new(proto.StreamReqData) err = p.Validate() if err != nil { fmt.Println(err) } fmt.Println("接收到一个请求") res,err := handler(ctx,req) fmt.Println("请求已完成") return res,err }