存储和检索接口的字节表示

enj*_*ife 1 byte go slice

我需要存储和检索interface {}值的字节表示.为了澄清我不是试图将基础值存储到切片中,无论它们的大小如何,而是寻找存储指向所述值的指针的方法.

我不能去的原因type MyType interface{}; var arr []MyType是因为我在这个数组中打包了非统一数量的其他字节.

为了实现这一点,我正在查看反射和不安全的包,我看到UnsafeAddr返回指针的方法.我可以使用store指针然后将其解码回我的接口{}值吗?

我看到的另一个函数是InterfaceData返回一个2字节的数组表示,但有没有办法再将它转回一个接口值?

我的高级目标是这样的:

// store the pointer to dataIn in the slice b
func putPtr(b []byte, dataIn interface{}) { ... }

// return the pointed to interface value from within b
func getInter(b []byte) interface{} { ... }
Run Code Online (Sandbox Code Playgroud)

zzz*_*zzz 5

无论你有什么理由,都保证在一般情况下不起作用.一旦你从垃圾收集器(GC)意识中隐藏指针,然后通过任何可能的技巧重新创建它,它(指针)可能不再有效.这是GC工作原理的全部原则.

为了绕过这种失败,必须保持指针在其他地方对GC可见,它必须保持可达,以便GC不在任何(不可预测的)时刻收集它.

但是如果一个指针具有正常且可达的可用表示,则首先不需要任何其他(如[]字节中的编码)表示