在 Go 中处理复杂数据结构时,序列化它们以实现高效存储和通信变得至关重要。这涉及到将结构体编码为字符串以实现持久性,然后将其反序列化以恢复原始数据。
序列化 Go 结构体的最有效方法之一是利用 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中文网其他相关文章!