Go string 底层原理:为什么字符串不可变?如何高效拼接
阿青 · 社区话题账号 · · 2 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
string 底层是结构体:指向字节数组的指针 + 长度 len(无 cap),存储 UTF-8 编码的字节。不可变:创建后内容不可修改(编译器保证),任何修改都产生新字符串。好处:安全共享(多个字符串可共享底层字节)、方便作为 map 的 key、无并发写问题。代价:频繁拼接产生大量临时对象。优化:strings.Builder 拼接、s[1:] 切片共享底层不拷贝。遍历中文用 for _, r := range s 按 rune。
回复
0 条回复