Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Teknik pengesahan lapangan dalam ujian Golang

Teknik pengesahan lapangan dalam ujian Golang

WBOY
WBOYasal
2023-08-08 10:58:451330semak imbas

Teknik pengesahan lapangan dalam ujian Golang

Kemahiran pengesahan lapangan dalam ujian Golang

Semasa proses pembangunan, pengesahan lapangan adalah tugas yang sangat penting. Pengesahan medan yang betul memastikan integriti data dan keselamatan program anda. Di Golang, kita boleh menggunakan beberapa helah untuk memudahkan kerja pengesahan medan. Artikel ini akan memperkenalkan beberapa teknik pengesahan medan yang biasa digunakan dalam ujian Golang dan memberikan contoh kod yang sepadan.

  1. Menggunakan Struct Tag

Golang’s Struct Tag ialah kaedah untuk melampirkan metadata pada medan struktur. Mereka wujud sebagai pasangan nilai kunci dalam definisi medan struktur dan boleh diakses pada masa jalan melalui refleksi. Kita boleh menggunakan teg struktur untuk menentukan peraturan pengesahan untuk medan dan melaksanakan pengesahan berdasarkan peraturan ini dalam fungsi pengesahan.

Contoh kod berikut menunjukkan cara menggunakan teg struktur untuk pengesahan medan:

type User struct {
    ID     int    `valid:"required"`
    Name   string `valid:"required,min=3,max=20"`
    Email  string `valid:"email"`
}

func ValidateStruct(data interface{}) error {
    value := reflect.ValueOf(data)

    for i := 0; i < value.NumField(); i++ {
        field := value.Type().Field(i)
        fieldValue := value.Field(i).Interface()

        tag := field.Tag.Get("valid")
        rules := strings.Split(tag, ",")

        for _, rule := range rules {
            if rule == "required" {
                if fieldValue == nil || fieldValue == reflect.Zero(reflect.TypeOf(fieldValue)).Interface() {
                    return fmt.Errorf("Field %s is required", field.Name)
                }
            }

            if strings.HasPrefix(rule, "min=") {
                min, _ := strconv.Atoi(strings.TrimPrefix(rule, "min="))
                if len(fieldValue.(string)) < min {
                    return fmt.Errorf("Field %s should be at least %d characters long", field.Name, min)
                }
            }

            if strings.HasPrefix(rule, "max=") {
                max, _ := strconv.Atoi(strings.TrimPrefix(rule, "max="))
                if len(fieldValue.(string)) > max {
                    return fmt.Errorf("Field %s should be at most %d characters long", field.Name, max)
                }
            }

            if rule == "email" {
                if !isValidEmail(fieldValue.(string)) {
                    return fmt.Errorf("Field %s is not a valid email address", field.Name)
                }
            }
        }
    }

    return nil
}

func main() {
    user := User{
        ID:    1,
        Name:  "John",
        Email: "john@example.com",
    }

    err := ValidateStruct(user)
    if err != nil {
        fmt.Println(err)
    }
}
  1. Gunakan perpustakaan pihak ketiga untuk pengesahan

Golang mempunyai banyak perpustakaan pihak ketiga yang sangat baik yang menyediakan fungsi pengesahan medan yang kaya. Perpustakaan ini biasanya menyediakan lebih banyak peraturan pengesahan dan kaedah pengesahan yang fleksibel, yang boleh memudahkan proses pembangunan.

Berikut ialah beberapa perpustakaan pengesahan medan yang biasa digunakan di Golang:

  • govalidator: Pustaka pengesahan medan yang ringkas dan mudah digunakan yang menyokong pelbagai peraturan pengesahan biasa.
  • validator: Pustaka pengesahan medan yang berkuasa yang menyokong peraturan pengesahan tersuai dan berbilang teg pengesahan.

Apabila menggunakan perpustakaan pengesahan pihak ketiga, kami hanya perlu memperkenalkan pakej yang sepadan dan menggunakannya mengikut dokumentasi perpustakaan. Berikut ialah contoh kod untuk pengesahan medan menggunakan perpustakaan govalidator:

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

type User struct {
    ID     int    `valid:"required"`
    Name   string `valid:"required,alphanum"`
    Email  string `valid:"email"`
}

func main() {
    user := User{
        ID:    1,
        Name:  "John123",
        Email: "john@example.com",
    }

    success, err := govalidator.ValidateStruct(user)
    if err != nil {
        fmt.Println(err)
    }

    if !success {
        fmt.Println("Validation failed")
    }
}

Ringkasan

Pengesahan medan ialah bahagian penting dalam memastikan integriti dan keselamatan data program. Di Golang, kami boleh menggunakan teg struktur dan pustaka pengesahan pihak ketiga untuk memudahkan kerja pengesahan medan. Artikel ini memperkenalkan beberapa teknik pengesahan medan yang biasa digunakan dalam ujian Golang dan menunjukkannya dengan contoh kod. Semoga petua ini akan membantu anda menjadi lebih baik dalam pengesahan medan.

Atas ialah kandungan terperinci Teknik pengesahan lapangan dalam ujian Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn