ホームページ >バックエンド開発 >Golang >Go で複雑な構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?

Go で複雑な構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-30 12:38:12455ブラウズ

How Can I Efficiently Serialize and Deserialize Complex Structs in Go?

Go での複雑な構造体のシリアル化と逆シリアル化

Go で複雑なデータ構造を扱う場合、効率的なストレージと通信のためにそれらをシリアル化することが重要になります。これには、永続化のために構造体を文字列にエンコードし、後でそれを逆シリアル化して元のデータを回復することが含まれます。

Gob と Base64 の使用

Go 構造体をシリアル化するための最も効果的なアプローチの 1 つは、gob を利用することです。そしてbase64パッケージ。その仕組みは次のとおりです。

import (
    "bytes"
    "encoding/base64"
    "encoding/gob"
    "fmt"
)

type SX map[string]interface{}

// go binary encoder
func ToGOB64(m SX) string {
    b := bytes.Buffer{}
    e := gob.NewEncoder(&b)
    err := e.Encode(m)
    if err != nil {
        fmt.Println("failed gob Encode", err)
    }
    return base64.StdEncoding.EncodeToString(b.Bytes())
}

// go binary decoder
func FromGOB64(str string) SX {
    m := SX{}
    by, err := base64.StdEncoding.DecodeString(str)
    if err != nil {
        fmt.Println("failed base64 Decode", err)
    }
    b := bytes.Buffer{}
    b.Write(by)
    d := gob.NewDecoder(&b)
    err = d.Decode(&m)
    if err != nil {
        fmt.Println("failed gob Decode", err)
    }
    return m
}

カスタム構造体のシリアル化

Session 構造体などのカスタム構造体または型をシリアル化するには、次の行をコードに追加するだけです:

func init() {
    gob.Register(SX{})
    gob.Register(Session{}) // Register your custom struct
}

追加のシリアル化オプション

gob に加えて、代替のシリアル化形式もありますGo で利用可能です (2020 年現在)。動的構造のシリアル化については、ガイダンスとして 2022 年のベンチマークを参照することを検討してください。

以上がGo で複雑な構造体を効率的にシリアル化および逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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