在
func (dat Data) Encode () io.Writer { var ret io.Writer enc := gob.NewEncoder(ret)
您
ret
io.Writer
nil
gob.NewEncoder
问题是你要写的是零 io.Writer :
var ret io.Writer enc := gob.NewEncoder(ret)
ret 没有。因此在尝试写入时会发生恐慌(就像它一样)。
写一个正常的方法 Encode() 方法,就是拿一个 io.Writer 作为一个论点:
Encode()
func (dat Data) Encode(w io.Writer) error { enc := gob.NewEncoder(ret) return enc.Encode(dat) }
然后,您将使用现有方法调用此方法 io.Writer (可能是文件,网络套接字等):
file, err := os.Create("somefile") ... if err := dat.Encode(file); err != nil { fmt.Printf("Failed to encode: %s\n", err) }