字符串
特性
- string 类型数据不可变
- 获取字符串长度时间为0
- 所见即所得,原始字符串中任何转义字符不会起到转义作用,即声明字符串变量时右值的转义字符不会起作用。
- GO 默认字符集是Unicode,支持主流非ASCLL字符集。每个字符都是一个unicode字符,以UTF8编码格式存储在内存中。
组成
- 字节组成
- for 循环,遍历的每个字节
- 字符组成
- for range循环,遍历的每个码点(字符)
- rune 类型用来表示一个Unicode码点;
rune本质是 int32类型的别名(alias)
type rune = int32
string 在GO运行时的表示
type StringHeader struct {
Data uintptr
Len int
}
图片来源:static001.geekbang.org/resource/im…
string 它本身并不真正存储字符串数据,由一个指向底层存储的指针和字符串的长度字段组成的结构体,类似于Linux操作文件的文件描述符。
string 常用操作
- 下标操作 str[i] 得到的是字节
- 字符迭代要用 for range
- 字符串连接 直接使用
+,还提供了strings.Builder/Join, fmt.Sprintf等函数 - 字符串判断:
- 等价判断: 先判断长度
- 大小判断: 字典序
- 字符串转换 直接显示转型
var s string = "sds"
rs = []rune(s)
bs = []byte(s)
s1 = string(rs)
s2 = string(bs)