登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-12 09:51:33 300浏览 收藏

本篇文章给大家分享《如何在 Go 中将任何数据类型转换为字节》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在尝试创建一个 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 不起作用。有关更多信息,请参阅 here

现在回答你的问题...

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

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

但是,这也有局限性,因为在序列化结构时,它只能访问导出的字段,或通过 GobEncoder 接口公开的字段。 This Q&A explains why this limitation exists

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

总而言之:不可能对所有数据类型进行有意义的操作。对于许多数据类型来说很难做到这一点,而对于“普通”数据类型来说则很简单。

今天关于《如何在 Go 中将任何数据类型转换为字节》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>