我有一个
shape interface{}
描绘了圆形、正方形或其他东西。binary
数组中的 []byte
返回。
binary
编码器import "encoding/binary"
var buffer bytes.Buffer
errCvtBytes := binary.Write(&buffer, binary.BigEndian, shape)
我收到错误消息:
_binary.Write: some values are not fixed-sized in type xml.Circle_
gob
编码器:import "encoding/gob"
var buffer bytes.Buffer
enc := gob.NewEncoder(&buffer)
gob.Register(xml.Circle{})
/* ... others registrations ... */
errCvtBytes := enc.Encode(shape)
gob: type util.DateTime has no exported fields
在这两种情况下,编码器肯定是正确的!
给定的结构对于某些结构可能具有可变长度值,而对于其他结构则没有导出字段。
但它们不是我的。我无法改变任何这些作为规范给予我的结构。他们保持原样。完全正确。
知道了这一点,我还有办法让 Go 成功地将具有这些结构之一的对象转换为二进制吗?
要尝试第三个编码器吗?
当您想要控制您可能无法控制或可能更改的业务对象的序列化格式时,将数据复制到您自己的结构中会很有帮助。与序列化相比,复制通常相当便宜,您可以根据需要注释结构并相应地对其进行版本控制,例如保留旧版本。
无论您的业务逻辑的最佳表示是什么,都可能不符合定义的序列化格式的要求。