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