💡
String类型特点
  • String类型数据不可变
  • 零值可用
  • 获取长度len(s)时间复杂度O(1)
  • + 、+= 字符串连接
  • 支持比较操作符 : == 、≠ 、 ≥、 >、 <、 ≤
  • 原生支持ASCII、UTF-8
  • ` 多行字符串 ` 所见即所得
 
💡
底层实现
runtime/string.go
string struct
  • str 指向底层存储字符串的指针
  • len 长度
运行时调用函数 【rowstring】实例化 string,同时创建一个临时切片。临时切片是后续运行时写入数据使用,
 
💡
高效构建字符串
构建字符串的方式:
  • + 号
  • strings.Builder
  • strings.Join
  • bytes.Buffer
  • fmt.Sprintf
 
构建效率排行
  1. 做了预初始化的 strings.Builder 效率最好
  1. 预初始化的 bytes.Buffer
  1. strings.Join
  1. fmt.Sptintf
 
使用场景:
  • 预估字符串长度的场景下,使用strings.Builder
    • strings.Join 在元素[]string 下可选用,性能最稳定
    • 使用+ 最直观
    • 多种不同类型变量构建 使用 fmt.Sprintf
     
    💡
    字符串的高效转换
     
    高效的方式是:尽量减少额外的内存使用,go编译时,会在某些常用场景下 做优化,如:stringSlicetmp 复用。
     

    性能背后原理:

    • strings.Builder 以倍数申请内存
    • bytes.Buffer转化为字符串时重新申请了一块空间,存放生成的字符串变量,而 strings.Builder 直接将底层的 []byte转换成了字符串类型返回了回来。