方法 | 描述 |
+ |
使用 + 操作符进行拼接会对遍历字符串,计算并开辟一个新的空间来存储合并后的字符串 |
fmt.Sprintf |
由于 printf 中可以使用 %d 等表示变量类型, sprintf 需要使用到反射来将不同的类型进行转换,效率较低 |
strings.Builder |
使用 WriteString() 进行拼接操作,内部使用 []byte 切片和 unsafe.pointer 指针实现 |
bytes.Buffer |
byte 缓冲器,底层是 []byte 切片 |
strings.Join |
strings.Join 是基于 strings.Builder 来实现的,在 Join 方法内调用了 b.Grow(n) 方法, 预分配了内存空间,较为高效 |
strings.Builder
和 bytes.Buffer
有什么区别?
strings.Builder
会预分配空间,减少扩容,效率更高,适合较长的字符串拼接操作
bytes.Buffer
主要用于处理单个字符,拥有许多针对单个 byte
的操作,如删除替换等,这个是 strings.Builder
没有的。
效率排行
strings.Join ≈ strings.Builder > bytes.Buffer > "+" > fmt.Sprintf