ホームページ  >  記事  >  バックエンド開発  >  golang でのシリアル化と逆シリアル化にリフレクションを使用する方法

golang でのシリアル化と逆シリアル化にリフレクションを使用する方法

王林
王林オリジナル
2024-05-01 15:09:01803ブラウズ

Go リフレクションを使用したシリアル化と逆シリアル化: シリアル化: エンコーディング/json.Marshal 関数を使用して、構造体をバイト ストリームにシリアル化します。逆シリアル化: バイト ストリームから構造体を逆シリアル化するには、encoding/json.Unmarshal 関数を使用します。

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

Go リフレクションをシリアル化および逆シリアル化に使用する方法

リフレクションは、実行中のプログラムを検査および変更できる Go の強力な機能です。これはシリアル化や逆シリアル化などのさまざまな目的に使用でき、データ構造をバイト ストリームとして保存し、後で再作成することができます。

シリアル化

リフレクションを使用して構造体をシリアル化するには、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)
    }
}

Deserialization

シリアル化されたデータを逆シリアル化するには、encoding/json パッケージの Unmarshal 関数を使用します。この関数には、最初の引数として構造体へのポインタが必要で、2 番目の引数としてシリアル化されたデータを含むバイトのスライスが必要です。

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

実践的なケース

以下は、シリアル化と逆シリアル化にリフレクションを使用する実践的な例です:

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

以上がgolang でのシリアル化と逆シリアル化にリフレクションを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。