知识卡片
字符串是只读字节
内容
Go 字符串本质是只读字节序列,长度表示字节数而非字符数。它适合稳定共享和高效传递,但修改、按字符遍历时必须显式面对 UTF-8 与 rune。
参考来源
- 位置:《Go语言底层原理剖析》第5章《字符串本质与实现》5.1节《字符串的本质》
- 结论依据:原文说明"在Go语言中,字符串不能被修改,只能被访问",并给出运行时结构(Data指针+Len字段),指出"Len代表字符串的长度";随后用中文字符串 b 的例子说明"len(b)获取的长度为8"而不是可见字符数(4个汉字,每个占3字节),因此可以推出"字符串是只读字节序列、长度按字节计"的结论。
- 原始内容:但是在Go语言中,字符串不能被修改,只能被访问……Go语言运行时字符串string的表示结构如下。其中,Data指向底层的字符数组,Len代表字符串的长度……Go语言中所有的文件都采用UTF-8的编码方式……上例中的字母都只占据1字节,但是特殊的字符(例如大部分中文)会占据3字节。如下所示,变量b看起来只有4个字符,但是len(b)获取的长度为8。