项目中用了protobuf 做 RPC 协议,然后据说 gob 的encoder 和 decoder 比 protobuf 效率更高,于是写了一个用于 protobuf 结构体的深度拷贝库函数
func DeepCopy(dst, src interface{}) error {
var buf bytes.Buffer
if err := gob.NewEncoder(&buf).Encode(src); err != nil {
return err
}
return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
}
然而实际使用的时候发现有点坑。
gob 为了提高效率,对于 0 值是不拷贝的,不仅仅是整型的零值,还包括指向零值的指针,也不会拷贝。
测试代码如下:
package main
import<