第5章 数据

2017-05-08  本文已影响0人  c84f3109853b

5.1 字符串

字符串是不可变字节(byte)序列,其本身是一个复合结构。

type stingStruct struct {
str unsafe.Pointer
len int
}

头部指针指向字节数组,但没有NULL结尾。默认以UTF-8编码存储Unicode字符,字面量里允许使用十六进制、八进制和UTF编码格式。

注意:

  • 内置函数len返回字符数组长度,cap不接受字符串类型参数。
  • 字符串默认值不是nil,而是""。
  • 编译器不会解析原始字符串中的注释语句,且前置缩进空格也属于字符串。
  • 允许以索引号访问字节数组(非字符),但不能获取元素地址。
  • 以切片语法返回子串时,其内部依旧指向原字节数组。
  • 要修改字符串,须将其转换为可变类型([]byte或[]rune),待完成后在转换回来。但不管如何转换,都须重新分配内存,并复制数据。

使用for遍历字符串时,分byte和rune两种方式:

字符串拼接方法性能排序:
+ < fmt.Sprintf <= strings.Join <= bytes.Buffer

类型rune专门用来存储Unicode码点,它是int32的别名,相当于UCS-4/UTF-32编码格式。使用单引号的字面量,其默认类型就是rune。
标准库unicode里提供了丰富的操作函数。除验证函数外,还可用RuneCountInString代替len函数返回准确的Unicode字符数量。

上一篇下一篇

猜你喜欢

热点阅读