575 votes

Quelles sont les utilisations des étiquettes dans Go?

Dans le Langage Go de Spécification, il mentionne un bref aperçu de balises

Un champ déclaration peut être suivie par une option de chaîne de caractères littérale de la balise, qui devient un attribut de tous les champs dans le correspondant champ de la déclaration. Les étiquettes sont visibles au travers d'une réflexion l'interface, mais ne sont pas ignorés.

// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
  microsec  uint64 "field 1"
  serverIP6 uint64 "field 2"
  process   string "field 3"
}

C'est une très courte explication de l'OMI, et je me demandais si quelqu'un pouvait m'apporter ce que l'utilisation de ces balises?

167voto

jdi Points 38029

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X