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