3
我刚刚在使用protobuf进行Go编程时跳入内存中,而且我正需要验证结构中的数据。我发现govalidator,这似乎做我需要的完美的工作。它验证基于现场的标签结构,像在proto消息中声明一个字段标记
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: "[email protected]"
}
ok, err = govalidator.ValidateStruct(jdoe)
我的protobuf的定义看起来像
message Contact {
string firstName = 1;
string lastName = 2;
string email = 3;
}
现在我的问题是,有没有办法来定义的字段标识原始消息。从我在生成的go代码中看到的东西,编译器总是给这些字段添加标签,但是我能够“偷偷”找到我需要的代码吗?此外,我会想象解组可能是一种可能的解决方案,但对于我来说,解组只是将字段值复制到具有必要字段标签的等价结构,似乎效率不高。
不确定'有效:'alpha,需要“',但它应该是'lastName'和'firstName'的重复吗? – RickyA
对于消息传输(protobuf)和内部数据处理有不同的结构是一种相当常见的模式。有时你会使用一个(通常是消息传递),但正如你所看到的,当你想从内部结构中获取不同的东西时会遇到麻烦。我的建议:为内部目的和复制制作不同的内容。 – RickyA
@RickyA是的,它应该是重复的 - 这些是govalidator使用的验证规则。第二部分 - 这正是我目前所做的:-)谢谢 – Havelock