参数校验

    在使用 validate 之前首先需要安装 proto-gen-validate

    如果使用中遇到无法使用或者生成的代码中 包含

    规则示例

    下面为大家列举几种常用类型的参数校验示例,更多的示例可以在 proto-gen-validate 文档中查看。

    1. // 参数必须大于 0
    2. // 参数必须在 0 到 120 之间
    3. int32 age = 2 [(validate.rules).int64 = {gt:0, lte: 120}];
    4. // 参数是 1 或 2 或 3
    5. uint32 code = 3 [(validate.rules).uint32 = {in: [1,2,3]}];
    6. // 参数不能是 0 或 99.99
    7. float score = 1 [(validate.rules).float = {not_in: [0, 99.99]}];

    布尔类型

    1. bool state = 5 [(validate.rules).bool.const = true];
    2. // 参数必须为 false
    3. bool state = 5 [(validate.rules).bool.const = false];

    文本类型

    消息体

    1. // 参数为必填项
    2. Info info = 11 [(validate.rules).message.required = true];
    3. string address = 1;
    4. }

    生成代码

    1.直接使用protoc生成

    1. protoc --proto_path=. \
    2. --go_out=paths=source_relative:. \
    3. --validate_out=paths=source_relative,lang=go:. \
    4. xxxx.proto

    执行命令

    1. make validate

    我们可以将 validate 中间件注入到 http 或者 grpc 中,在有请求进入时 validate 中间件会自动对参数根据 proto 中编写的规则进行校验。

    http

    1. httpSrv := http.NewServer(
    2. http.Address(":8000"),
    3. http.Middleware(
    4. validate.Validator(),

    grpc

    References