将嵌套结构保存到gob

时间:2018-04-26 14:35:20

标签: go struct slice gob

我正在尝试将结构保存到gob,但该文件缺少嵌套类型的值。我可以单独保存Matrix类型,但Network结构的gob数据不包括Matrix值。有没有办法将这个嵌套的结构保存到gob,还是我必须拆分它?

type Matrix [][]float64
type Network struct {
     wih                Matrix
     who                Matrix
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您必须导出要编码的结构字段:

type Network struct {
     Wih Matrix
     Who Matrix
}

引自encoding/gob的包文档:

  

还支持结构,数组和切片。结构编码和解码仅导出的字段

导出字段后,它将起作用。见这个例子:

n := Network{
    Wih: Matrix{{1.1, 2.2}, {3.3, 4.4}},
    Who: Matrix{{5.5, 6.6}, {7.7, 8.8}},
}
fmt.Println(n)

buf := &bytes.Buffer{}
if err := gob.NewEncoder(buf).Encode(n); err != nil {
    panic(err)
}

var n2 Network
if err := gob.NewDecoder(buf).Decode(&n2); err != nil {
    panic(n2)
}
fmt.Println(n2)

输出(在Go Playground上尝试):

{[[1.1 2.2] [3.3 4.4]] [[5.5 6.6] [7.7 8.8]]}
{[[1.1 2.2] [3.3 4.4]] [[5.5 6.6] [7.7 8.8]]}