在golang中,有2个高效的用于字符数据写入的缓存类型,同时他们也都实现了io.Writer接口,一个是bytes包中的Buffer 这个还实现了io.Reader接口; 另外一个是 strings包中的字符串构建类型 Builder。 在使用他们的时候是不需要初始化的,只需要定义一个对应类型的变量即可,如: var buf bytes.Buffer;
bytes.Buffer使用示例
import (
"bytes"
"fmt"
)
func ExampleBytesBuffer() {
// bytes包中的Buffer使用示例
var buf bytes.Buffer // 仅定义就可以
for i := 0; i < 3; i++ {
// buf.WriteString(fmt.Sprintf("val%d ", i)) // 使用buf自带的方法吸入数据
fmt.Fprintf(&buf, "val%d", i) // 把buf当做io.Writer来用
}
fmt.Println(buf.String()) // output: val0 val1 val2
}
strings.Builder使用示例
import (
"fmt"
"strings"
)
func ExampleStringBuilder() {
// strings包中的Builder使用示例
var sb strings.Builder
// 循环写入数据
for i := 0; i < 3; i++ {
sb.WriteString(fmt.Sprintf("val%v ", i))
// fmt.Fprintf(&sb, "val%v ", i)
}
fmt.Println(sb.String()) // output: val0 val1 val2
}
总结: bytes.Buffer, strings.Builder这2个类型是我们在处理字符串数据是使用最为频繁的2个类型,他们都只需要定义变量,不需要初始化就可以直接使用。 同时他们也都实现了io.Writer接口,我们可以把他们当做一个Writer来使用。 特别是strings.Builder对于在拼接大量的字符串的时候是非常高效的,使用它可以最大限度的介绍内存复制。。。。