Créer des balises dans Go

Jay Singh 30 janvier 2023
  1. Créer des balises à l’aide de la fonction struct dans Go
  2. Créer des balises à l’aide de JSON dans Go
Créer des balises dans Go

Les structures, également appelées structs, combinent plusieurs bits de données en une seule entité. Ces ensembles de données définissent des notions de niveau supérieur comme une adresse, composée d’un numéro de maison, d’une rue, d’une ville, d’un état et d’un code postal.

Vous pouvez utiliser des balises struct pour réguler la manière dont ces informations sont allouées aux champs d’une structure lors de sa lecture à partir de systèmes tels que des bases de données ou des API. Les balises struct sont de courts morceaux de métadonnées connectés aux champs d’une structure et offrent des instructions à d’autres codes Go qui interagissent avec elle.

Il s’agit d’une méthode d’ajout de métadonnées à votre structure. Les données peuvent être utilisées par votre package ou une application tierce pour déterminer comment effectuer une action spécifique ou gérer les données de manière appropriée.

Ces méta-données sont séparées par un espace et déclarées à l’aide d’un littéral chaîne au format clé : valeur. Plusieurs balises existent dans le même champ, servant un objectif et une bibliothèque distincts.

Ce didacticiel vous montrera comment créer des balises à l’aide de la fonction struct de Go.

Créer des balises à l’aide de la fonction struct dans Go

Un type User avec un champ Nom est défini dans cet exemple. Une balise struct de name a été ajoutée à la colonne Name.

Exemple 1:

package main

import "fmt"

type User struct {
    Name string `example:"name"`
}

func (u *User) String() string {
    return fmt.Sprintf("Hello, I am %s", u.Name)
}

func main() {
    u := &User{
    Name: "Jay Singh",
    }

    fmt.Println(u)
}

Production:

Hello, I am Jay Singh

Vous devrez utiliser le package reflect pour accéder et utiliser les balises.

Si le format traditionnel est utilisé, nous pouvons utiliser les méthodes Get et Lookup de StructTag pour accéder aux informations sur la balise. La méthode Lookup renvoie également la valeur ok, indiquant si la balise a été trouvée dans le champ.

Exemple 2 :

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name  string `color:"white"`
    Age   int    `color:"black"`
    Email string
}

func main() {
    a := User{"Jay", 99, "example@jay.com"}

    ut := reflect.TypeOf(a)
    for i := 0; i < ut.NumField(); i++ {
        field := ut.Field(i)
        if color, ok := field.Tag.Lookup("color"); ok {
            if color == "" {
                fmt.Println("(blank)")
            } else {
                fmt.Println(color)
            }
        } else {
            fmt.Println("(Not Specified)")
        }
    }
}

Production:

white
black
(Not Specified)

Créer des balises à l’aide de JSON dans Go

L’encodeur JSON de la bibliothèque standard utilise des balises struct comme annotations pour indiquer à l’encodeur comment vous souhaitez nommer vos champs dans la sortie JSON. Le package encoding/json contient ces mécanismes d’encodage et de décodage JSON.

Pour comprendre comment JSON est encodé sans les balises struct, essayez cet exemple :

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "os"
    "time"
)

type User struct {
    Name      string
    Password  string
    Address   []string
    CreatedAt time.Time
}

func main() {
    a := &User{
    Name:      "Jay Singh",
    Password:  "qwertyuiop",
    CreatedAt: time.Now(),
    }

    out, err := json.MarshalIndent(a, "", "  ")
    if err != nil {
        log.Println(err)
        os.Exit(1)
    }

    fmt.Println(string(out))
}

Production:

{
    "Name": "Jay Singh",
    "Password": "qwertyuiop",
    "Address": null,
    "CreatedAt": "2022-03-10T23:00:00Z"
}