每當我創建一個 Go 結構時,我都會使用結構標簽,以便我可以使用go-playground/validator輕松驗證它——例如:type DbBackedUser struct { Name sql.NullString `validate:"required"` Age sql.NullInt64 `validate:"required"`}我目前正在與第三方集成。他們提供了一個 Go SDK,但是 SDK 中的結構不包含validate標簽,他們不能/不愿意添加標簽。由于我的團隊的數據完整性要求,通過這個第三方 SDK 引入的所有數據都必須經過驗證才能使用。問題是似乎沒有辦法在不在結構上定義驗證標記的情況下使用 Validator 包來驗證結構。我們目前提出的解決方案是將 SDK 結構中的所有數據映射到我們自己的結構中(在其上定義了驗證標簽),對這些結構執行驗證,然后,如果驗證通過,我們可以直接使用來自SDK 的結構(我們需要使用 SDK 定義的結構在我們的系統周圍傳遞數據——因此這些帶有驗證標簽的結構只能用于驗證)。這里的問題是我們必須維護這些僅用于驗證的結構,而且結構之間的映射具有時間和內存成本。在這種情況下是否有更好的方法來處理結構驗證?
1 回答

MMTTMM
TA貢獻1869條經驗 獲得超4個贊
替代技術是使用驗證構造函數:NewFoobar(raw []byte) (Foobar, error)
但我看到 go-validator 通過“結構級驗證”支持您的案例:
https://github.com/go-playground/validator/blob/master/_examples/struct-level/main.go
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消