首頁 > 後端開發 > Golang > 如何在 Go 中使用 Struct 標籤自訂驗證錯誤訊息?

如何在 Go 中使用 Struct 標籤自訂驗證錯誤訊息?

Barbara Streisand
發布: 2024-12-10 03:38:16
原創
434 人瀏覽過

How to Customize Validation Error Messages in Go Using Struct Tags?

使用結構體標籤自訂驗證錯誤訊息

在使用Gin 的Go Web 開發中,結構驗證在持久化之前確保數據完整性方面起著至關重要的作用。然而,底層驗證庫提供的預設錯誤訊息可能很冗長且不太用戶友好。本文探討如何根據結構體標籤傳回自訂錯誤訊息,讓開發者能夠向使用者提供更有意義、更可操作的回饋。

理解 Validator.ValidationErrors

Gin 利用用於驗證的 github.com/go-playground/validator/v10 函式庫。當驗證失敗時,會傳回 validator.ValidationErrors 類型的錯誤。此錯誤類型包含一個 validator.FieldError 實例片段,每個實例代表一個無效欄位。

自訂錯誤訊息

要自訂錯誤訊息,您可以解開驗證器。 ValidationErrors錯誤使用errors包,存取validator.FieldError,並根據欄位的標籤建構自訂錯誤訊息。結構體欄位中的 tag 屬性允許開發人員指定自訂驗證規則和錯誤訊息。

例如,考慮以下程式碼片段:

type ApiError struct {
    Field string
    Msg   string
}

func msgForTag(tag string) string {
    switch tag {
    case "required":
        return "This field is required"
    case "email":
        return "Invalid email"
    }
    return ""
}
登入後複製

此程式碼定義了一個 ApiError 結構體和一個輔助函數函數 msgForTag 將標籤對應到自訂錯誤訊息。使用它們,您可以實現以下處理程序:

var u User
err := c.BindQuery(&u);
if err != nil {
    var ve validator.ValidationErrors
    if errors.As(err, &ve) {
        out := make([]ApiError, len(ve))
        for i, fe := range ve {
            out[i] = ApiError{fe.Field(), msgForTag(fe.Tag())}
        }
        c.JSON(http.StatusBadRequest, gin.H{"errors": out})
    }
    return
}
登入後複製

在此處理程序中,validator.ValidationErrors 錯誤被展開,並且每個validator.FieldError 都會轉換為帶有基於字段標籤的自定義訊息的ApiError 。然後對 ApiError 切片進行 JSON 編碼,並作為錯誤回應傳回,其中包含與欄位對應的動態鍵。

結論

透過使用結構標記自訂驗證錯誤訊息,開發人員可以在資料驗證期間提供更用戶友好且資訊豐富的回饋。這種方法增強了使用者體驗並簡化了偵錯過程,從而更容易識別和修正輸入錯誤。

以上是如何在 Go 中使用 Struct 標籤自訂驗證錯誤訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板