我只是在使用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代码中看到的内容,编译器无论如何都会在字段中添加标记,但我可能会偷偷摸摸"那些我也需要的?另外,我认为解组可能是一种可能的解决方案,但是对于我来说,仅仅将字段值复制到具有必要字段标记的等效结构时,对我来说似乎效率低下。
答案 0 :(得分:2)
具有相同的数据封装结构和来自客户端的输入只是一个纯粹的巧合。正如我们不仅在评论中所建议的那样,而且还有更多经验丰富的同事(比我更有经验),我只是映射了(在这种特殊情况下为1:1)从proto生成的结构到数据的字段封装结构我定义了。