Ici est un simple exemple de balises être utilisé avec l' encoding/json
package pour contrôler la façon dont les champs sont interprétées lors de l'encodage et de décodage:
Essayez de vivre: http://play.golang.org/p/BMeR8p1cKf
package main
import (
"fmt"
"encoding/json"
)
type Person struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
MiddleName string `json:"middle_name,omitempty"`
}
func main() {
json_string := `
{
"first_name": "John",
"last_name": "Smith"
}`
person := new(Person)
json.Unmarshal([]byte(json_string), person)
fmt.Println(person)
new_json, _ := json.Marshal(person)
fmt.Printf("%s\n", new_json)
}
// *Output*
// &{John Smith }
// {"first_name":"John","last_name":"Smith"}
Le json package pouvez regarder les étiquettes pour le domaine et de savoir comment la carte json <=> struct domaine, et également des options supplémentaires, comme si elle devait ignorer les champs vides lors de la sérialisation de retour json.
Fondamentalement, tous les paquets pouvez utiliser la réflexion sur les champs de regarder les valeurs de balise et d'agir sur ces valeurs. Il y a un peu plus d'infos à leur sujet dans le reflet de package
http://golang.org/pkg/reflect/#StructTag :
Par convention, tag chaînes sont un enchaînement de facultativement
séparées par un espace clé:"valeur" des paires. Chaque clé est une chaîne non vide
composé de non-contrôle, de caractères autres que l'espace (U+0020 ' '),
citation (U+0022 '"') et du côlon (U+003A ':'). Chaque valeur est cité à l'aide de
U+0022 '"' personnages et Aller littéral de chaîne de la syntaxe.