类似 []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.Bufferbuffer.WriteString("你好")buffer.WriteString(",Ada!")fmt.Println(buffer.String())}func buffer2() {var r = new(bytes.Buffer) //返回类型是*bytes.Bufferfmt.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 []byteb := bytes.NewBuffer(arr)b.WriteString("hello")b.WriteString(",world")fmt.Println(b.String())}/*你好,艾斯利hello,world*/
用上述方法比+=更节省内存和CPU,尤其是要串联的字符串数目特别多的时候。
