2

I'm trying to save a struct to gob, but the file is missing the values of the nested type. I can save the Matrix type on its own, but the gob data of the Network struct doesn't include the Matrix values. Is there a way to save this nested struct to gob or do I have to split it?

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

Thanks!

icza
  • 389,944
  • 63
  • 907
  • 827
Lucas
  • 357
  • 3
  • 15

1 Answers1

1

You must export the struct fields you want to encode:

type Network struct {
     Wih Matrix
     Who Matrix
}

Quoting from package doc of encoding/gob:

Structs, arrays and slices are also supported. Structs encode and decode only exported fields.

After exporting the fields it will work. See this example:

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)

Output (try it on the 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]]}
icza
  • 389,944
  • 63
  • 907
  • 827