Maison  >  Article  >  développement back-end  >  Techniques de validation sur le terrain dans les tests Golang

Techniques de validation sur le terrain dans les tests Golang

WBOY
WBOYoriginal
2023-08-08 10:58:451329parcourir

Techniques de validation sur le terrain dans les tests Golang

Compétences en matière de vérification sur le terrain dans les tests Golang

Pendant le processus de développement, la vérification sur le terrain est une tâche très importante. Une validation appropriée sur le terrain garantit l'intégrité des données et la sécurité de votre programme. Dans Golang, nous pouvons utiliser quelques astuces pour simplifier le travail de validation sur le terrain. Cet article présentera certaines techniques de validation de terrain couramment utilisées dans les tests Golang et fournira des exemples de code correspondants.

  1. Utilisation des balises Struct

La balise Struct de Golang est une méthode permettant d'attacher des métadonnées aux champs de structure. Ils existent sous forme de paires clé-valeur dans la définition des champs de structure et sont accessibles au moment de l'exécution via la réflexion. Nous pouvons utiliser des balises de structure pour définir des règles de validation pour les champs et effectuer une validation basée sur ces règles dans la fonction de validation.

L'exemple de code suivant montre comment utiliser les balises de structure pour la validation des champs :

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. Utiliser des bibliothèques tierces pour la validation

Golang possède de nombreuses excellentes bibliothèques tierces qui fournissent de riches fonctions de validation de champ. Ces bibliothèques fournissent généralement davantage de règles de vérification et de méthodes de vérification flexibles, ce qui peut grandement simplifier le processus de développement.

Voici quelques bibliothèques de validation de champ couramment utilisées dans Golang :

  • govalidator : une bibliothèque de validation de champ simple et facile à utiliser qui prend en charge diverses règles de validation courantes.
  • validator : une puissante bibliothèque de validation de champ qui prend en charge des règles de validation personnalisées et plusieurs balises de validation.

Lors de l'utilisation d'une bibliothèque de vérification tierce, il suffit d'introduire le package correspondant et de l'utiliser conformément à la documentation de la bibliothèque. Voici un exemple de code pour la validation de champ à l'aide de la bibliothèque 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")
    }
}

Résumé

La validation de champ est un élément important pour garantir l'intégrité et la sécurité des données du programme. Dans Golang, nous pouvons utiliser des balises de structure et des bibliothèques de validation tierces pour simplifier le travail de validation sur le terrain. Cet article présente certaines techniques de validation de terrain couramment utilisées dans les tests Golang et les démontre avec des exemples de code. J'espère que ces conseils vous aideront à améliorer la validation sur le terrain.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn