Erstellen Tags in Go

Jay Singh 23 August 2022
  1. Erstellen von Tags mit der struct-Funktion in Go
  2. Erstellen Sie Tags mit JSON in Go
Erstellen Tags in Go

Strukturen, auch Structs genannt, kombinieren mehrere Datenbits zu einer einzigen Einheit. Diese Datensätze definieren übergeordnete Begriffe wie eine Adresse, bestehend aus Hausnummer, Straße, Ort, Bundesland und Postleitzahl.

Mit struct-Tags können Sie regeln, wie diese Informationen beim Auslesen aus Systemen wie Datenbanken oder APIs den Feldern einer Struktur zugeordnet werden. Struct-Tags sind kurze Bits von Metadaten, die mit Feldern einer Struktur verbunden sind und Anweisungen für anderen Go-Code bieten, der damit interagiert.

Dies ist eine Methode zum Hinzufügen von Metadaten zu Ihrer Struktur. Die Daten können von Ihrem Paket oder einer Drittanbieteranwendung verwendet werden, um zu bestimmen, wie eine bestimmte Aktion durchgeführt oder Daten angemessen behandelt werden sollen.

Diese Metadaten werden durch ein Leerzeichen getrennt und mit einem Stringliteral im Format Schlüssel:Wert deklariert. Es gibt mehrere Tags im selben Feld, die einem bestimmten Zweck und einer Bibliothek dienen.

Dieses Tutorial zeigt, wie Sie Tags mit der Funktion struct von Go erstellen.

Erstellen von Tags mit der struct-Funktion in Go

In diesem Beispiel wird ein Typ Benutzer mit einem Namensfeld definiert. Der Spalte name wurde ein struct-Tag name hinzugefügt.

Beispiel 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)
}

Ausgabe:

Hello, I am Jay Singh

Sie müssen das reflect-Paket verwenden, um auf die Tags zuzugreifen und sie zu verwenden.

Wenn das traditionelle Format verwendet wird, können wir die Methoden Get und Lookup von StructTag verwenden, um auf Informationen über das Tag zuzugreifen. Die Methode Lookup liefert ebenfalls den Wert ok zurück, der angibt, ob der Tag im Feld gefunden wurde.

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

Ausgabe:

white
black
(Not Specified)

Erstellen Sie Tags mit JSON in Go

Der JSON-Encoder der Standardbibliothek verwendet struct-Tags als Anmerkungen, um dem Encoder mitzuteilen, wie Sie Ihre Felder in der JSON-Ausgabe benennen möchten. Das Paket encoding/json enthält diese JSON-Encoding- und Decoding-Mechanismen.

Versuchen Sie dieses Beispiel, um zu verstehen, wie JSON ohne struct-Tags codiert wird:

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

Ausgabe:

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