go - 存储和检索接口(interface)的字节表示

标签 go byte slice

我需要存储和检索 interface{} 值的字节表示形式。澄清一下,我不是要将基础值存储到一个 slice 中,无论它们的大小是多少,而是寻找一种方法来存储指向所述值的指针。

我不能直接输入 type MyType interface{} 的原因; var arr []MyType 是因为我在这个数组中打包了不均匀数量的其他字节。

为了实现这个,我查看了 reflect 和 unsafe 包,我看到了像 UnsafeAddr 这样的方法,它返回一个指针。我可以使用存储该指针然后将其解码回我的接口(interface){}值吗?

我看到的另一个函数是 InterfaceData,它返回一个 2 字节数组表示形式,但是有什么方法可以再次将其转换回接口(interface)值吗?

我的高级目标是:

// 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{} { ... }

最佳答案

无论出于何种原因,它在一般情况下都无法正常工作。一旦您从垃圾收集器 (GC) 的意识中隐藏了一个指针,然后通过任何可能的技巧将其重新生成,它(指针)可能不再有效。这是 GC 工作原理的全部原则。

要绕过此故障,必须使指针对别处的 GC 可见,它必须保持可达,以便 GC 在任何(不可预测的)时刻不收集它。

但是如果一个人有一个可用的指针的正常和可达的表示,那么首先就不需要任何其他的(比如在 []byte 中编码)表示

关于go - 存储和检索接口(interface)的字节表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315329/

相关文章:

go - "Bounded"在编程中的含义

Gorilla Mux 不处理我的路径

golang 将 map[string]interface{} 解码为包含元数组的结构

Python Numpy 结构化数组(recarray)赋值到切片

string - 使用 Go 对 CPU id 进行位掩码转换

java - 一次从 .txt 获取 16 个字节

合并字节的c函数

image - 如何从网络图像中获取 Flutter Uint8List?

python - 为什么 `for x in list[None:None]:` 有效?

python - Pandas 切片因 DatetimeIndex 标签列表而失败