Heim >Backend-Entwicklung >Golang >Kodierungs- und Dekodierungstechniken für Strukturtypen in Golang-Funktionen
Golang ist eine sehr leistungsfähige Programmiersprache, die viele integrierte Typen und Funktionen bietet, um Programmierern dabei zu helfen, schnell effizienten Code zu schreiben. Unter diesen wird der Strukturtyp sehr häufig verwendet. Wenn es um Netzwerkkommunikation, Datenspeicherung und -übertragung usw. geht, müssen wir Strukturtypdaten normalerweise zur Übertragung in Binärdaten codieren oder in eine Zeichenfolge im JSON-Format serialisieren. In diesem Artikel werden einige Codierungs- und Decodierungstechniken für den Strukturtyp von Golang-Funktionen vorgestellt.
In Golang erfordert die Definition des Strukturtyps die Verwendung der Schlüsselwörter type und struct. Im Folgenden wird beispielsweise ein Personenstrukturtyp definiert, der zwei Felder enthält: Name und Alter:
type Person struct { Name string Age int }
JSON ist ein leichtes, einfach zu lesendes und zu schreibendes Datenaustauschformat. In Golang können wir die Funktionen Marshal() und Unmarshal() im JSON-Paket verwenden, um die JSON-Kodierung und -Dekodierung von Strukturtypen zu implementieren.
Bei der Codierung müssen wir den Strukturtyp in ein Byte-Array vom Typ []Byte konvertieren, was über die Funktion json.Marshal() erreicht werden kann. Im folgenden Beispiel wird beispielsweise eine Instanz p des Typs Person in eine Zeichenfolge im JSON-Format codiert:
p := Person{"Tina", 28} jsonData, _ := json.Marshal(p) fmt.Println(string(jsonData)) // {"Name":"Tina","Age":28}
Beim Decodieren müssen wir die JSON-Zeichenfolge in einen Strukturtyp analysieren. Dies kann durch die Funktion json.Unmarshal() erreicht werden. Das folgende Beispiel dekodiert beispielsweise die JSON-Zeichenfolge jsonStr in eine Person-Typ-Instanz:
jsonStr := `{"Name":"Tina", "Age": 28}` var p Person _ = json.Unmarshal([]byte(jsonStr), &p) fmt.Println(p) // {Tina 28}
Im Prozess der Netzwerkkommunikation oder Datenspeicherung müssen wir auch den Strukturtyp in ein Byte serialisieren Reihenfolge. Um beispielsweise die Person-Typ-Instanz p in die Byte-Sequenz byteData zu serialisieren:
buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, &p) byteData := buf.Bytes() fmt.Printf("%x ", byteData) // 54696e61001c0000
Wir verwenden die Funktionen bytes.Buffer und Binary.Write(), um den Strukturtyp p in die Byte-Sequenz byteData zu serialisieren. Der zweite Parameter der Funktion „binary.Write()“ gibt die Verarbeitungsmethode der Bytereihenfolge an, hier wird das LittleEndian-Format verwendet. 🔜 in RPC-Aufrufen und wird häufig während der Datenübertragung verwendet. In Golang wird das gob-Paket auch für die Gob-Kodierung und -Dekodierung bereitgestellt.
Gob-Codierungvar q Person err := binary.Read(bytes.NewReader(byteData), binary.LittleEndian, &q) if err != nil { fmt.Println(err) } fmt.Println(q) // {Tina 28}
Wir verwenden die Funktionen bytes.Buffer und gob.NewEncoder(), um den Strukturtyp p in eine Bytesequenz byteData zu codieren.
Beim Dekodieren müssen wir auch das Gob-Paket verwenden. Erstellen Sie eine Decoder-Instanz und verwenden Sie deren Decode()-Methode, um eine Folge von Bytes zu dekodieren. Dekodieren Sie beispielsweise die codierten ByteData im obigen Beispiel in eine Instanz q des Personentyps:
var byteData bytes.Buffer enc := gob.NewEncoder(&byteData) err := enc.Encode(&p) if err != nil { fmt.Println(err) } fmt.Printf("%x ", byteData.Bytes()) // 026864073544696e61001c
Zusammenfassung
Das obige ist der detaillierte Inhalt vonKodierungs- und Dekodierungstechniken für Strukturtypen in Golang-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!