Dawn's Blogs

分享技术 记录成长

0%

GO语言圣经学习笔记 (1) 字符串

字符串

GO语言中的字符串是由UTF-8编码的,所以GO语言字符串是变宽字符序列,每一个字符都用1到4个字节表示。

字符串不可变

字符串的值是不可变的,意味着:

  • 如果两个字符串共享相同的底层数据的话也是安全的,这使得复制任何长度的字符串代价是低廉的。

  • 同样,一个字符串s和对应的子字符串切片s[7:]的操作也可以安全地共享相同的内存,因此字符串切片操作代价也是低廉的。

在这两种情况下都没有必要分配新的内存

字符串切片共享内存

注意:Go语言的range循环在处理字符串的时候,会自动隐式解码UTF8字符串

bytes.Buffer

bytes.Buffer是一个实现了读写方法的可变大小的字节缓冲

使用bytes.Buffer进行字符串的累加比起+=要高效的多,尤其是在面对大数量的字符串时

1
2
3
4
var b bytes.Buffer // A Buffer needs no initialization.
b.Write([]byte("Hello "))
fmt.Fprintf(&b, "world!")
b.WriteTo(os.Stdout)