Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Reflection für die Serialisierung und Deserialisierung in Golang

So verwenden Sie Reflection für die Serialisierung und Deserialisierung in Golang

王林
王林Original
2024-05-01 15:09:01801Durchsuche

Verwenden Sie Go Reflection für Serialisierung und Deserialisierung: Serialisierung: Verwenden Sie die Funktion „encoding/json.Marshal“, um die Struktur in einen Bytestream zu serialisieren. Deserialisierung: Verwenden Sie die Funktion „encoding/json.Unmarshal“, um eine Struktur aus einem Bytestream zu deserialisieren.

golang 如何使用反射进行序列化和反序列化

So serialisieren und deserialisieren Sie mit Go Reflection

Reflection ist eine leistungsstarke Funktion in Go, mit der Sie ein laufendes Programm überprüfen und ändern können. Es kann für eine Vielzahl von Zwecken verwendet werden, einschließlich Serialisierung und Deserialisierung, und es ermöglicht Ihnen, Datenstrukturen als Byteströme zu speichern und sie später neu zu erstellen.

Serialisierung

Um Strukturen mithilfe von Reflektion zu serialisieren, verwenden Sie die Funktion Marshal aus dem Paket encoding/json. Diese Funktion benötigt als erstes Argument einen Zeiger auf eine Struktur und gibt einen serialisierten Byte-Slice zurück. encoding/json 包中的 Marshal 函数。该函数需要指向结构的指针作为其第一个参数,并返回序列化后的字节切片。

package main

import (
    "encoding/json"
    "fmt"

    "io/ioutil"

    "os"
)

type person struct {
    FirstName string
    LastName  string
    Age       int
}

func main() {
    p := person{FirstName: "John", LastName: "Doe", Age: 30}

    b, err := json.Marshal(&p)
    if err != nil {
        panic(err)
    }
    // 保存序列化后的数据到文件
    err = ioutil.WriteFile("person.json", b, 0644)
    if err != nil {
        panic(err)
    }
}

反序列化

要反序列化已序列化的数据,请使用 encoding/json 包中的 Unmarshal

func main() {
    var p person

    b, err := ioutil.ReadFile("person.json")
    if err != nil {
        panic(err)
    }
    // 反序列化数据到结构
    err = json.Unmarshal(b, &p)
    if err != nil {
        panic(err)
    }
    // 打印反序列化的数据
    fmt.Printf("%+v\n", p)
}

Deserialisierung

Um serialisierte Daten zu deserialisieren, verwenden Sie die Funktion Unmarshal aus dem Paket encoding/json. Die Funktion benötigt als erstes Argument einen Zeiger auf eine Struktur und als zweites Argument einen Byte-Slice, der die serialisierten Daten enthält.

type user struct {
    ID   int
    Name string
}

var users = []user{
    {1, "john"},
    {2, "jane"},
}

var b []byte

func main() {
    // 序列化用户数组
    b, _ = json.Marshal(users)
    // 将序列化后的数据保存到文件中
    ioutil.WriteFile("users.json", b, 0644)
    // 反序列化文件中的数据
    var loadedUsers []user
    json.Unmarshal(b, &loadedUsers)
    // 打印反序列化的用户
    fmt.Println(loadedUsers)
}

Praktischer Fall🎜🎜Das Folgende ist ein praktisches Beispiel für Serialisierung und Deserialisierung mithilfe von Reflektion: 🎜rrreee

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Reflection für die Serialisierung und Deserialisierung in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn