【问题标题】:How to encode struct to byte slice and decode byte slice back to original struct using gob encoding?如何使用 gob 编码将结构编码为字节切片并将字节切片解码回原始结构?
【发布时间】:2021-08-12 00:23:47
【问题描述】:

我正在尝试将结构编组为字节(通过 gob 编码),然后将这些字节解组回原始对象。我得到了意想不到的结果(对象没有得到正确的值)。请帮我纠正程序。

输入:

package main

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

type object struct {
    name string
    age  int
}

func main() {
    inputObject := object{age: 22, name: "Zloy"}
    fmt.Println(inputObject)

    var inputBuffer bytes.Buffer
    gob.NewEncoder(&inputBuffer).Encode(inputObject)
    fmt.Println(inputBuffer)

    destBytes := inputBuffer.Bytes()
    fmt.Println("\n", destBytes, "\n")

    var outputBuffer bytes.Buffer
    outputBuffer.Write(destBytes)
    fmt.Println(outputBuffer)

    var outputObject object
    gob.NewDecoder(&outputBuffer).Decode(&outputObject)
    fmt.Println(outputObject)
}

输出:

{Zloy 22}
{[18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0] 0 0}

 [18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0]     

{[18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0] 0 0}
{ 0}

预期输出:

{Zloy 22}
{[18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0] 0 0}

 [18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0]     

{[18 255 129 3 1 1 6 111 98 106 101 99 116 1 255 130 0 0 0] 0 0}
{Zloy 22}

【问题讨论】:

    标签: go encoding gob


    【解决方案1】:

    您需要将字段名称大写以使其可公开导出/可导入:

    type object struct {
        Name string
        Age  int
    }
    

    https://play.golang.org/p/_YqSmeDi6oH

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2020-06-08
      • 2020-09-12
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多