Go で複雑なデータ構造を扱う場合、効率的なストレージと通信のためにそれらをシリアル化することが重要になります。これには、永続化のために構造体を文字列にエンコードし、後でそれを逆シリアル化して元のデータを回復することが含まれます。
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 サイトの他の関連記事を参照してください。