Go 字符串

102 阅读1分钟

字符串

特性

  • 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
}

image.png 图片来源: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)