gpt4 book ai didi

go - 如何在 GoLang 中使用 GOB 编码序列化嵌套结构?

转载 作者:数据小太阳 更新时间:2023-10-29 03:21:00 25 4
gpt4 key购买 nike

我有几个示例嵌套结构,需要序列化它们。我正在使用 encoding/gob 库,它将结构数据转换为字节,使用 encoding/base64 库将字节转换为可读的 base64 格式。但是,当我运行我的示例代码时,我收到了一个serialization error 错误。我不明白为什么会发生这种情况以及如何解决这个问题。

我按照这个例子:Golang serialize and deserialize back

代码如下:

主要包

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

type Hello struct {
greeting string
}

type Bye struct {
helloSaid Hello
byesaid Hello
}


func (b1 Bye) Serialize() (string, error) {
b := bytes.Buffer{}
e := gob.NewEncoder(&b)
err := e.Encode(b1)
if err != nil {
return string(b.Bytes()[:]), errors.New("serialization failed")
}
return base64.StdEncoding.EncodeToString(b.Bytes()), nil
}

func DeserializeBye(str string) (Bye, error) {
m := Bye{}
by, err := base64.StdEncoding.DecodeString(str)
if err != nil {
return m, errors.New("deserialization failed")
}
b := bytes.Buffer{}
b.Write(by)
d := gob.NewDecoder(&b)
err = d.Decode(&m)
if err != nil {
return m, errors.New("deserialization failed")
}
return m, nil
}

func main() {
h := Hello{greeting: "hello"}
b := Bye{helloSaid: h, byesaid: h}
serialized, err := b.Serialize()
if err != nil {
fmt.Println(err)
}
fmt.Println(serialized)
}

最佳答案

请公开HelloBye 结构的字段。请看the documentation for the gob package :

Structs encode and decode only exported fields.

关于go - 如何在 GoLang 中使用 GOB 编码序列化嵌套结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com