Junxiu 的技术博客Junxiu 的技术博客
首页
文章
分类
标签
时间线
电子书
首页
文章
分类
标签
时间线
电子书
  • 介绍
  • 第 1 章

    • 1.1 本章导言
    • 1.6 字符串

1.6 字符串

Go 的 string 本质是一个只读的字节序列,底层由 data 指针与 len 长度两个字段组成,不携带容量(cap)字段。

不可变与转换开销

字符串不可变,因此 []byte(s) 与 string(b) 在多数实现中会发生一次内存拷贝。高频路径上应尽量避免反复互转:

// 不必要的拷贝
for i := 0; i < n; i++ {
    _ = []byte(prefix + s) // 每次都分配
}

字符串拼接

少量拼接优先使用 strings.Builder,避免在循环中使用 + 产生多次分配:

var b strings.Builder
for _, s := range parts {
    b.WriteString(s)
}
result := b.String()

小结

  • 字符串是不可变的字节序列,无容量概念;
  • 与 []byte 互转会发生拷贝,注意热路径上的开销;
  • 拼接优先 strings.Builder。

下一节我们将进入映射(map)的实现细节。

最近更新:: 2026/11/1 11:55
Contributors: wangwangzhou
Prev
1.1 本章导言