Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan refleksi untuk bersiri dan penyahserikatan dalam golang

Cara menggunakan refleksi untuk bersiri dan penyahserikatan dalam golang

王林
王林asal
2024-05-01 15:09:01814semak imbas

Gunakan pantulan Go untuk penyirian dan penyahsirian: Pensirian: Gunakan fungsi pengekodan/json.Marshal untuk menyirikan struktur ke dalam aliran bait. Penyahserikatan: Gunakan fungsi pengekodan/json.Unmarshal untuk menyahsiri struktur daripada aliran bait.

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

Cara mensiri dan menyahsiri menggunakan pantulan Go

Refleksi ialah ciri berkuasa dalam Go yang membolehkan anda memeriksa dan mengubah suai atur cara yang sedang berjalan. Ia boleh digunakan untuk pelbagai tujuan, termasuk bersiri dan penyahserilan, dan ia membolehkan anda menyimpan struktur data sebagai aliran bait dan kemudian menciptanya semula kemudian.

Serialization

Untuk menyusun struktur menggunakan pantulan, gunakan fungsi Marshal daripada pakej encoding/json. Fungsi ini memerlukan penuding kepada struktur sebagai hujah pertamanya dan mengembalikan kepingan bait bersiri. 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)
}

Deserialisasi

Untuk menyahsiri data bersiri, gunakan fungsi Unmarshal daripada pakej encoding/json. Fungsi ini memerlukan penuding kepada struktur sebagai hujah pertamanya dan sekeping bait yang mengandungi data bersiri sebagai hujah kedua.

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

Kes praktikal🎜🎜Berikut ialah contoh praktikal siri dan penyahserikan menggunakan refleksi: 🎜rrreee

Atas ialah kandungan terperinci Cara menggunakan refleksi untuk bersiri dan penyahserikatan dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn