iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Software Development

Go 語言學習手札系列 第 23

23 | 規則什麼的,自己定義!

  • 分享至 

  • xImage
  •  

在軟體開發過程中,表單驗證是一個至關重要的部分。無論是網站的註冊頁面、API的請求參數,還是後端應用程式的資料輸入,都需要一種有效且方便的方式來驗證用戶輸入的數據。Golang 的 Validator套件就是一個不錯的選擇,能夠幫助實現表單驗證功能。

什麼是 Validator?

驗證 在程式設計中是一個很重要的步驟,就像檢查確保一個東西是否符合某些標準規則一樣。就像你在填寫一張表單時,系統需要確保你的名字、電子郵件地址等資訊是否合法和有效。

Golang Validator 是一個開源的Go語言套件,用於對結構體中的字段進行驗證。提供一個簡單的方式,能夠定義驗證規則,並在執行時檢查數據的有效性。這個套件的主要目標是幫助減少重複的驗證代碼,提高代碼可讀性,並減少錯誤。

Validator 支援多種常見的驗證類型,包括必填字串數字字符串長度正則表達式自定義函數等等。除了內置的驗證規則外,還可以輕鬆自定義自己的驗證函數,以滿足特定需求。可以自定義錯誤消息,以便更好地向用戶解釋驗證失敗的原因。結構體中包含嵌套結構時,Golang Validator 也能夠處理這種情況,確保所有字段都得到了驗證。

使用 Validator

  • 安裝Golang Validator
go get github.com/go-playground/validator/v10
  • import
import "github.com/go-playground/validator/v10"
  • 創建一個驗證器
validate := validator.New()
  • 定義結構體
type User struct {
    Username string `json:"username" validate:"required,min=4,max=20"`
    Email    string `json:"email" validate:"required,email"`
    Password string `json:"password" validate:"required"`
}
  • 執行驗證
user := User{
    Username: "john_doe",
    Email:    "john.doe@example.com",
    Password: "secretpass",
}

err := validate.Struct(user)
if err != nil {
    // 驗證失敗,處理錯誤
    fmt.Println(err)
}

附上完整程式碼

導入Golang Validator套件,然後定義一個User結構體,並為每個字段定義了驗證規則。接著創建一個驗證器實例,並使用validate.Struct(user)對用戶結構進行驗證。

如果驗證失敗,我們會處理錯誤並印出相關的錯誤信息。如果驗證成功,可以在「驗證成功,執行註冊流程」的部分執行用戶註冊的相關邏輯。

package main

import (
	"fmt"
	"github.com/go-playground/validator/v10"
)

type User struct {
	Username string `json:"username" validate:"required,min=4,max=20"`
	Email    string `json:"email" validate:"required,email"`
	Password string `json:"password" validate:"required"`
}

func main() {
	// 創建驗證器實例
	validate := validator.New()

	// 創建一個用戶
	user := User{
		Username: "john_doe",
		Email:    "john.doe@example.com",
		Password: "secretpass",
	}

	// 驗證用戶結構
	err := validate.Struct(user)
	if err != nil {
		// 驗證失敗,處理錯誤
		fmt.Println("註冊信息驗證失敗:")
		for _, err := range err.(validator.ValidationErrors) {
			fmt.Printf("字段:%s,錯誤:%s\n", err.Field(), err.Tag())
		}
	} else {
		// 驗證成功,執行註冊流程
		fmt.Println("註冊成功!")
		// 在這裡執行註冊用戶的邏輯
	}
}

印出

註冊成功!

碎語

今年亞運台灣選手真得厲害!
第一次知道卡巴迪,跟老鷹捉小雞有異曲同工之妙。


上一篇
22 | 內存管理
下一篇
24 | Test, one two three...
系列文
Go 語言學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言