golang 每日一庫之 govalidator

govalidator 是一個用 Go 語言編寫的輕量級的驗證庫,提供了豐富的驗證和清理功能,主要用於驗證和清理用戶輸入的數據(如表單數據、API 請求的 JSON 數據等)。它支持常見的數據驗證功能,如電子郵件、URL、IP 地址、信用卡號等的驗證,同時也支持自定義驗證規則。

1. 安裝

你可以通過 go get 來安裝 govalidator

go get github.com/asaskevich/govalidator

安裝完成後,你就可以在 Go 項目中使用它進行輸入驗證和數據清理了。

2. 基本用法

govalidator 提供了兩種常見的驗證方式:

2.1 函數式驗證

常見的驗證方法如:govalidator.IsEmail()govalidator.IsURL() 等,用於驗證字符串是否符合特定規則。

package main

import (
"fmt"
"github.com/asaskevich/govalidator"
)

funcmain() {
// 驗證郵箱
 email := "test@example.com"
if govalidator.IsEmail(email) {
 fmt.Println(email, "is a valid email address")
 } else {
 fmt.Println(email, "is NOT a valid email address")
 }

// 驗證 URL
 url := "https://www.example.com"
if govalidator.IsURL(url) {
 fmt.Println(url, "is a valid URL")
 } else {
 fmt.Println(url, "is NOT a valid URL")
 }

// 驗證 IP 地址
 ip := "192.168.0.1"
if govalidator.IsIP(ip) {
 fmt.Println(ip, "is a valid IP address")
 } else {
 fmt.Println(ip, "is NOT a valid IP address")
 }
}

2.2 結構體驗證

govalidator 支持通過結構體標籤來進行驗證,類似於 json 標籤的方式。

package main

import (
"fmt"
"github.com/asaskevich/govalidator"
)

type User struct {
 Email string`valid:"email"`
 Age   int    `valid:"range(18|60)"`
}

funcmain() {
// 創建一個 User 對象
 user := User{
 Email: "test@example.com",
 Age:   25,
 }

// 驗證結構體
 valid, err := govalidator.ValidateStruct(user)
if err != nil {
 fmt.Println("Error:", err)
 } elseif valid {
 fmt.Println("User is valid")
 } else {
 fmt.Println("User is not valid")
 }
}

3. 常見的驗證方法

govalidator 提供了大量的內建驗證函數,以下是一些常見的驗證方法:

3.1 驗證常見數據類型

email := "test@example.com"
if govalidator.IsEmail(email) {
 fmt.Println("Valid email")
} else {
 fmt.Println("Invalid email")
}

url := "https://example.com"
if govalidator.IsURL(url) {
 fmt.Println("Valid URL")
} else {
 fmt.Println("Invalid URL")
}

ip := "192.168.1.1"
if govalidator.IsIP(ip) {
 fmt.Println("Valid IP")
} else {
 fmt.Println("Invalid IP")
}

3.2 自定義驗證

你可以自定義驗證規則,在某些特殊的情況下,govalidator 允許你提供自定義驗證器。

// 自定義驗證規則
govalidator.CustomTypeTagMap.Set("valid_password", govalidator.CustomValidator(func(str string)bool {
// 密碼驗證規則:至少6個字符,包含一個數字和一個字母
returnlen(str) >= 6 && containsDigit(str) && containsLetter(str)
}))

// 用自定義規則驗證字段
type User struct {
 Password string`valid:"valid_password"`
}

funccontainsDigit(str string)bool {
for _, c := range str {
if c >= '0' && c <= '9' {
returntrue
 }
 }
returnfalse
}

funccontainsLetter(str string)bool {
for _, c := range str {
if (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') {
returntrue
 }
 }
returnfalse
}

funcmain() {
 user := User{Password: "abc123"}
 valid, err := govalidator.ValidateStruct(user)
if err != nil {
 fmt.Println("Invalid:", err)
 } elseif valid {
 fmt.Println("Valid user")
 }
}

3.3 清理數據

govalidator 還提供了數據清理的功能,比如去除空格、轉換大小寫等。

str := "   hello world   "
cleanStr := govalidator.Trim(str) // 去除前後的空格
fmt.Println("Cleaned String:", cleanStr)

str = "hElLo WoRlD"
cleanStr = govalidator.ToLower(str) // 轉換爲小寫
fmt.Println("Lowercase String:", cleanStr)

4. 結構體驗證

結構體驗證是 govalidator 中非常強大的功能。你可以通過結構體標籤指定驗證規則,來方便地對結構體的字段進行驗證。

4.1 結構體字段驗證

type User struct {
 Email   string`valid:"email"`
 Age     int    `valid:"range(18|100)"`
 Website string`valid:"url"`
}

funcmain() {
 user := User{
 Email:   "test@example.com",
 Age:     25,
 Website: "https://example.com",
 }

// 驗證結構體
 valid, err := govalidator.ValidateStruct(user)
if err != nil {
 fmt.Println("Validation Error:", err)
 } elseif valid {
 fmt.Println("User is valid")
 } else {
 fmt.Println("User is not valid")
 }
}

5. 總結

govalidator 是一個非常強大的庫,提供了豐富的功能來驗證和清理數據。它支持多種常見的驗證功能,如郵箱、URL、IP 地址、信用卡號等,同時也支持自定義驗證和數據清理。通過結構體標籤,你可以輕鬆地對輸入進行驗證,確保數據的正確性。

主要特點:

標題:golang 每日一庫之 govalidator
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/02/10/1739164536237.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/MYzCHBs40mosD5jCAwWvZw