字符串拼接性能
小于 1 分钟
字符串拼接性能
一、字符串拼接方式
使用 +
fmt.Sprintf
strings.Builder
var builder strings.Builder builder.WriteString("Hello") builder.WriteString(" World") result := builder.String() fmt.Println(result)
bytes.Buffer
var buffer bytes.Buffer buffer.WriteString("Good") buffer.Write([]byte("bye")) result := buffer.String() fmt.Println(result)
[]byte 或者 []rune
var byteSlice []byte byteSlice = append(byteSlice, []byte("Hello")...) byteSlice = append(byteSlice, []byte(" World")...) result := string(byteSlice) fmt.Println(result)
二、性能比较
使用+
拼接字符串和fmt.Sprintf
都很慢,Sprintf
还有一些字符检查比如%d
之类的。使用了strings.Builder
并且预分配内存时候最快。
三、性能背后原理
strings.Builder
动态扩容,专门用于字符串构建,减少了不必要的类型转换等开销.bytes.Buffer
自动扩容,并且是以倍数申请内。主要设计目的是处理字节序列,涉及到更多的字节与字符串之间的转换操作.[]byte\[]rune
底层是数组涉及数据转换.+
连接字符串每次申请内存空间都是刚好实际需要的空间,需要多次内存分配和复制.