类似 []byte的切片十分常见,Go语言有一个bytes包专门解决这种类型的操作方法。
bytes包和字符串包十分类似。而且它还包含一个十分有用的类型Buffer,这是一个长度可变的bytes的buffer,提供Read和Write方法,因为读写长度未知的bytes最好使用buffer。
1.1 Buffer定义
第一种定义方法
var buffer bytes.Buffer
第二种:
var r *bytes.Buffer = new(bytes.Buffer)
示例:
func main() {
buffer1()
fmt.Println("----------------")
buffer2()
}
func buffer1() {
var buffer bytes.Buffer
buffer.WriteString("你好")
buffer.WriteString(",Ada!")
fmt.Println(buffer.String())
}
func buffer2() {
var r = new(bytes.Buffer) //返回类型是*bytes.Buffer
fmt.Println("类型是:", reflect.TypeOf(r))
r.WriteString("你好")
r.WriteString(",Leon!")
fmt.Println(r.String())
}
/*
你好,Ada!
----------------
类型是: *bytes.Buffer
你好,Leon!
*/
除此之外,通过函数NewBuffer(buf []byte) Buffer,或者NewBuffString(s string)创建 Buffer对象,也可以实现
func main() {
buffer3()
}
func buffer3() {
a := bytes.NewBufferString("你好")
a.WriteString(",艾斯利")
fmt.Println(a.String())
var arr []byte
b := bytes.NewBuffer(arr)
b.WriteString("hello")
b.WriteString(",world")
fmt.Println(b.String())
}
/*
你好,艾斯利
hello,world
*/
用上述方法比+=更节省内存和CPU,尤其是要串联的字符串数目特别多的时候。