在原始消息中声明字段标签

Hav*_*ock 5 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)
Run Code Online (Sandbox Code Playgroud)

我的 protobuf 定义如下

message Contact {
    string firstName = 1;
    string lastName = 2;
    string email = 3;
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,有没有办法在原始消息中定义字段标签。从我在生成的 go 代码中看到的情况来看,编译器无论如何都会向字段添加标签,但是我可以“偷偷”我需要的标签吗?另外,我认为解组可能是一种可能的解决方案,但在我看来,仅将字段值复制到具有必要字段标签的等效结构中进行解组似乎效率低下。

Hav*_*ock 2

数据封装和来自客户端的输入具有相同的结构纯粹是巧合。因为不仅在评论中建议,而且在 protobuf 方面更有经验的同事(比我)也建议我刚刚将 proto 生成的结构中的字段映射到数据(在本例中为 1:1)我定义的封装结构。