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

Cara menggunakan refleksi untuk bersiri dan penyahserikatan dalam golang

王林
Lepaskan: 2024-05-01 15:09:01
asal
857 orang telah melayarinya

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)
    }
}
Salin selepas log masuk

反序列化

要反序列化已序列化的数据,请使用 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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk
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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan