• 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

  • 相关阅读:
    LeetCode.1282. 用户分组
    查题接口API
    【cpolar】搭建我的世界Java版服务器,公网远程联机
    python3-函数与参数以及空值
    ES6转为ES5 AST
    2022年9月2号(常用matlab图像处理函数)
    redis方法 setIfAbsent
    Docker + Selenium Grid 搭建分布式 UI 自动化测试
    使用new/delete动态管理内存【C/C++内存分布】
    Android学习笔记 2.3.3 按钮(Button)组件的功能与用法 && 2.3.4 使用9Patch图片作为背景
  • 原文地址:https://blog.csdn.net/zl5186888/article/details/126775237