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"
}