Mat*_*ner 55 string bytearray go
经常写Go应用程序,我发现自己可以选择使用[]byte或string.除了明显的可变性之外[]byte,我该如何决定使用哪一个?
我举例说明了几个用例:
[]byte.由于切片容量是固定的,有什么理由不返回字符串?[]byte不像string默认情况下打印得那么好,所以我经常发现自己正在string为了记录目的而进行投射.应该一直是string吗?[]byte,始终会创建一个新的基础数组.如果前置数据是不变的,为什么这不是一个string?and*_*olm 28
我的建议是在你处理文本时默认使用字符串.但是,如果满足下列条件之一,请使用[]字节:
[]字节的可变性将显着减少所需的分配数量.
您正在处理使用[]字节的API,并且避免转换为字符串将简化您的代码.
Abh*_*uch 15
我已经意识到在Go中,比任何其他非ML风格的语言更多,这种类型用于传达意义和预期用途.因此,确定使用哪种类型的最佳方法是问自己数据是什么.
字符串表示文本.只是文字.编码不是你必须担心的,并且所有操作都是逐个字符地工作,而不管"字符"实际上是什么.
数组表示二进制数据或该数据的特定编码.[]byte表示数据只是字节流或单字节字符流.[]int16表示整数流或两个字节字符的流.
鉴于几乎所有处理字节的事物都具有处理字符串的功能,反之亦然,我建议不要问你需要对数据做什么,而是询问数据代表什么.一旦找出瓶颈,就进行优化.
编辑:这篇文章是我得到使用类型转换来分解字符串的理由.
一个区别是返回的[]byte可能会被重用来保存另一个/新数据(string没有新的内存分配),而
不能.另一个是,至少在gc实现中,string是一个比单词更小的实体[]byte.当有很多这样的项目时,可以用来节省一些内存.
铸造一个[]byte以string伐木是没有必要的.典型的"文本"的动词,比如%s,%q用于工作string和[]byte表情同样.在另一个方向,同样适用于例如%x或% 02x.
取决于为什么要进行连接,以及结果是否会在之后的某个/其他地方再次组合.如果是这种情况那么[]byte可能表现更好.