• gRPC集成protoc-gen-validate


    protoc-gen-validate简介

    安装和配置 Linux
    执行make build之前需要先切换到protoc-gen-validate路径下;因为make build执行的就是这个路径下的Makefile;一定要确保在对应的路径下,这样make build才不会出错

    fetches this repo into $GOPATH

    go get -d github.com/envoyproxy/protoc-gen-validate

    installs PGV into $GOPATH/bin

    make build
    Windows
    0.6.7版本exe下载地址
    最新版本exe(页面查找)
    下载完成后需要将exe文件拷贝到 go的根补录的bin目录下

    代码 proto hello.proto
    syntax = “proto3”;
    option go_package = “.;proto”;
    import “validate.proto”;

    service Greeter{
    rpc SayHello(Person) returns (Person);
    }

    message Person {
    uint64 id = 1 [(validate.rules).uint64.gt = 999];

    string email = 2 [(validate.rules).string.email = true];

    string name = 3 [(validate.rules).string = {
    pattern: “[u4e00-u9fa5]”,
    max_bytes: 30,
    }];

    Location home = 4 [(validate.rules).message.required = true];

    message Location {
    double lat = 1 [(validate.rules).double = {gte: -90, lte: 90}];
    double lng = 2 [(validate.rules).double = {gte: -180, lte: 180}];
    }
    }
    validate.proto
    validate.proto再hello.proto有引用;可以直接再validate.protocopy出来一份放到与hello.proto的同级目录下,也可以直接复制下面的代码

    syntax = “proto2”;
    package validate;

    option go_package = “github.com/envoyproxy/protoc-gen-validate/validate”;
    option java_package = “io.envoyproxy.pgv.validate”;

    import “google/protobuf/descriptor.proto”;
    import “google/protobuf/duration.proto”;
    import “google/protobuf/timestamp.proto”;

    // Validation rules applied at the message level
    extend google.protobuf.MessageOptions {
    // Disabled nullifies any validation rules for this message, including any
    // message fields associated with it that do support validation.
    optional bool disabled = 1071;
    // Ignore skips generation of validation methods for this message.
    optional bool ignored = 1072;
    }

    // Validation rules applied at the oneof level
    extend google.protobuf.OneofOptions {
    // Required ensures that exactly one the field options in a oneof is set;
    // validation fails if no fields in the oneof are set.
    optional bool required = 1071;
    }

    // Validation rules applied at the field level
    extend google.protobuf.FieldOptions {
    // Rules specify the validations to be performed on this field. By default,
    // no validation is performed against a field.
    optional FieldRules rules = 1071;
    }

    // FieldRules encapsulates the rules for each type of field. Depending on the
    // field, the correct set should be used to ensure proper validations.
    message FieldRules {
    optional MessageRules message = 17;
    oneof type {
    // Scalar Field Types
    FloatRules float = 1;
    DoubleRules double = 2;
    Int32Rules int32 = 3;
    Int64Rules int64 = 4;
    UInt32Rules uint32 = 5;
    UInt64Rules uint64 = 6;
    SInt32Rules sint32 = 7;
    SInt64Rules sint64 = 8;
    Fixed32Rules fixed32 = 9;
    Fixed64Rules fixed64 = 10;
    SFixed32Rules sfixed32 = 11;
    SFixed64Rules sfixed64 = 12;
    BoolRules bool = 13;
    StringRules string = 14;
    BytesRules bytes = 15;

    // Complex Field Types
    EnumRules     enum     = 16;
    RepeatedRules repeated = 18;
    MapRules      map      = 19;
    
    // Well-Known Field Types
    AnyRules       any       = 20;
    DurationRules  duration  = 21;
    TimestampRules timestamp = 22;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    }
    }

    // FloatRules describes the constraints applied to float values
    message FloatRules {
    // Const specifies that this field must be exactly the specified value
    optional float const = 1;

    // Lt specifies that this field must be less than the specified value,
    // exclusive
    optional float lt = 2;

    // Lte specifies that this field must be less than or equal to the
    // specified value, inclusive
    optional float lte = 3;

    // Gt specifies that this field must be greater than the specified value,
    // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
    // range is reversed.
    optional float gt = 4;

    // Gte specifies that this field must be greater than or equal to the
    // specified value, inclusive. If the value of Gte is larger than a
    // specified Lt or Lte, the range is reversed.
    optional float gte = 5;

    // In specifies that this field must be equal to one of the specified
    // values
    repeated float in = 6;

    // NotIn specifies that this field cannot be equal to one of the specified
    // values
    repeated float not_in = 7;

    // IgnoreEmpty specifies that the validation rules of this field should be
    // evaluated only if the field is not empty
    optional bool ignore_empty = 8;
    }

    // DoubleRules describes the constraints applied to double values
    message DoubleRules {
    // Const specifies that this field must be exactly the specified value
    optional double const = 1;

    // Lt specifies that this field must be less than the specified value,
    // exclusive
    optional double lt = 2;

    // Lte specifies that this field must be less than or equal to the
    // specified value, inclusive
    optional double lte = 3;

    // Gt specifies that this field must be greater than the specified value,
    // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
    // range is reversed.
    optional double gt = 4;

    // Gte specifies that this field must be greater than or equal to the
    // specified value, inclusive. If the value of Gte is larger than a
    // specified Lt or Lte, the range is reversed.
    optional double gte = 5;

    // In specifies that this field must be equal to one of the specified
    // values
    repeated double in = 6;

    // NotIn specifies that this field cannot be equal to one of the specified
    // values
    repeated double not_in = 7;

    // IgnoreEmpty specifies that the validation rules of this field should be
    // evaluated only if the field is not empty
    optional bool ignore_empty = 8;
    }

    // Int32Rules describes the constraints applied to int32 values
    message Int32Rules {
    // Const specifies that this field must be exactly the specified value
    optional int32 const = 1;

    // Lt specifies that this field must be less than the specified value,
    // exclusive
    optional int32 lt = 2;

    // Lte specifies that this field must be less than or equal to the
    // specified value, inclusive
    optional int32 lte = 3;

    // Gt specifies that this field must be greater than the specified value,
    // exclusive. If the value of Gt is larger than a specified Lt or Lte, the
    // range is reversed.
    optional int32 gt = 4;

    // Gte specifies that this field must be greater than or equal to the
    // specified value, inclusive. If the value of Gte

  • 相关阅读:
    Java进阶导图xmind版本
    外卖项目(项目优化1)10---缓存优化
    垃圾收集算法
    C Primer Plus(6) 中文版 第14章 结构和其他数据形式 14.3 定义结构变量
    Typestript核心——接口interface,类类型,类接口,继承接口
    GPT-3被超越?解读低能耗、高性能的GlaM模型
    Java面试题:@PostConstruct、init-method和afterPropertiesSet执行顺序?
    用MATLAB解决气象站设计问题
    STM32两种输入两种输出仿真设计合集
    鲜花静态HTML网页作业作品 大学生鲜花网页设计制作成品 简单DIV CSS布局网站
  • 原文地址:https://blog.csdn.net/zl5186888/article/details/126775237