GRPC 的验证器

插件地址

protoc-gen-validate

 

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
    }

 

上一篇:go 开启goroutine并捕获错误


下一篇:2022-2-20 剑指offer day10