如何在Go中将任何数据类型转换为字节



我正在尝试制作一个for循环,将任何数据类型转换为字节数组。。。这就是我现在的

var arrByte [][]byte
for _,v := range *arr.(*[]interface{}) {
string := fmt.Sprint(v)   // What can I put here so that I dont have to convert to string
arrByte = append(arrByte, []byte(string))
}

这个代码的问题是我无法将它转换回它的数据类型。那么,我如何直接更改它,使其保持格式正确,以便以后可以运行它呢?

var arrInterface []interface{}
for _,v := range arrByte {
data := binary.BigEndian.Uint64(v)
arrInterface = append(arrInterface, data)
}

首先,请注意术语:您谈论的似乎是字节切片,而不是字节数组。Go中的数组是固定长度的,因此对它们调用append是不起作用的。请参阅此处了解更多信息。

现在谈谈你的问题。。。

我正在尝试制作一个for循环,将任何数据类型转换为字节数组。。。

这是不可能的,除非是在最肤浅、最无意义的意义上。例如,如果您有一个类型为net.Conn的变量,将其转换为字节会给您一个没有意义的值,因为它只与一个特定的活动网络连接结合在一起才有意义。

然而,假设您没有像这样引用短暂状态的变量,将任意变量转换为字节片的最简单方法是使用类似于gob编码的方法。

然而,这也有局限性,因为在序列化结构时,它只能访问导出的字段,或者通过GobEncoder接口公开的字段。这个问答;A解释了为什么存在这种限制。

现在,在某些情况下,您可以通过反射来绕过这个限制,例如,但这样做非常麻烦,而且通常是不明智的,因为未导出的字段通常引用短暂状态(请参阅上面的注释(。

总之:不可能对所有数据类型都有意义地执行此操作。对于许多数据类型来说很难做到这一点,而对于"正常的";数据类型。

最新更新