繁体   English   中英

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

[英]How to convert any data type to a byte in 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)
    }

首先,关于术语的注释:您似乎在谈论字节而不是字节 arrays。 Go 中的 Arrays 是固定长度的,因此在它们上调用append将不起作用。 请参阅此处了解更多信息。

现在回答你的问题...

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

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

但是,假设您没有像这样引用临时 state 的变量,将任意变量转换为字节切片的最简单方法是使用gob encoding之类的方法。

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

现在,在某些情况下,您可以通过反射来解决此限制,但是这样做非常麻烦,而且通常是不明智的,因为未导出的字段通常引用临时 state(请参阅上面的注释)。

总而言之:不可能对所有数据类型都有意义地执行此操作。 对于许多数据类型来说很难做到这一点,而对于“普通”数据类型来说做到这一点是微不足道的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM