在 proto 消息中声明一个字段标签

Declaring a field tag in proto message

我刚刚开始使用 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;
}

现在我的问题是,有没有办法在原型消息中定义字段标签。从我在生成的 go 代码中看到的情况来看,编译器无论如何都会向字段添加标签,但我可以 "sneak" 我也需要的标签吗?另外,我想解组可能是一种可能的解决方案,但对我来说,解组只是为了将字段值复制到具有必要字段标记的等效结构,这在某种程度上似乎效率低下。

具有相同的数据封装结构和来自客户端的输入纯属巧合。正如不仅在评论中建议的那样,而且在 protobuf 方面比我更有经验的同事也建议我刚刚将 proto 生成的结构中的字段映射(在这种特殊情况下为 1:1)到数据我定义的封装结构