在原型邮件

时间:2016-02-18 07:41:02

标签: go protocol-buffers

我只是在使用protobuf进行Go编程时,我需要验证结构中的数据。我找到govalidator,这似乎完全可以满足我的需要。它确实根据字段标记验证结构,如

type Contact struct {
    firstName string `valid:"alpha,required"`
    lastName string `valid:"alpha,required"`
    email string `valid:"email,required"`
}

jdoe := &Contact{
    firstName: "John",
    lastName: "Doe",
    email: "jdoe@mail.com"
}

ok, err = govalidator.ValidateStruct(jdoe)

我的protobuf定义看起来像

message Contact {
    string firstName = 1;
    string lastName = 2;
    string email = 3;
}

现在我的问题是,有没有办法在proto消息中定义字段标签。根据我在生成的go代码中看到的内容,编译器无论如何都会在字段中添加标记,但我可能会偷偷摸摸"那些我也需要的?另外,我认为解组可能是一种可能的解决方案,但是对于我来说,仅仅将字段值复制到具有必要字段标记的等效结构时,对我来说似乎效率低下。

1 个答案:

答案 0 :(得分:2)

具有相同的数据封装结构和来自客户端的输入只是一个纯粹的巧合。正如我们不仅在评论中所建议的那样,而且还有更多经验丰富的同事(比我更有经验),我只是映射了(在这种特殊情况下为1:1)从proto生成的结构到数据的字段封装结构我定义了。