【发布时间】:2012-06-05 07:12:08
【问题描述】:
在编写 Go 应用程序时,我发现自己可以选择使用 []byte 或 string。除了[]byte 的明显可变性之外,我如何决定使用哪一个?
我有几个用例示例:
- 函数返回一个新的
[]byte。既然切片容量是固定的,那有什么理由不返回字符串呢? -
默认情况下,
[]byte的打印效果不如string,因此我经常发现自己转换为string以进行日志记录。应该一直是string吗? - 添加
[]byte时,始终会创建一个新的底层数组。如果要添加的数据是常量,为什么不应该是string?
【问题讨论】:
-
这听起来取决于你的使用。如果你打算和他们一起做字符串操作,那就叫它
string。如果只是不透明的数据被打乱,为什么不[]byte?它归结为用例。 -
如果您需要处理单个字符,而不是 UTF-8 编码字节流,请先将其转换为符文(32 位整数 IIRC)。
-
那么还有
[]rune,最好表示可变字符串 -
可变性确实是字符串与字节切片或符文之间的关键区别。如果修改了原始数组,则在处理切片时会出现许多细微差别——例如,该数组的切片被用作映射中的键或存储在其他地方的情况。尽量避免陷入将切片视为固定元组的习惯——它们实际上更像是有长度的 C 指针。
-
Go 有一个名为
rune的类型?我对 Google 的看法有所上升。