【问题标题】:How to serialize a nested struct with GOB encoding in GoLang?如何在 GoLang 中使用 GOB 编码序列化嵌套结构?
【发布时间】:2019-05-29 08:22:16
【问题描述】:

我有几个示例嵌套结构,需要对它们进行序列化。我正在使用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)
}

【问题讨论】:

标签: go serialization struct


【解决方案1】:

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

结构只对导出的字段进行编码和解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多