字符串

发布时间 2024-01-09 17:57:03作者: l2c

内置的len函数返回字符串的字节数(并非文字符号的数目),下标访问操作s[i]则取得第i个字符,其中0i<len(s)

字符串的第i个字节不一定就是第i个字符,因为非ascII字符的UTF-8码点需要来两个字节或多个字节。

子串生成操作s[i:j]产生一个新字符串,内容取自原字符串的字节,下标从i(含边界值)开始,直到j(不含边界值),结果大小是j-i个字节。操作数i与j的默认值分别是0和len,若省略i或j,或两者,则取默认值

+连接两个字符串而生成一个新字符串,可以通过比较运算符做比较,如==和<,比较运算按字节进行,结果服从本身的字典排序。

不可变,不允许修改,不可变意味着两个字符串能安全地共用同一段底层内存,使得复制任何长度字符串的开销都低廉。类似地,字符串s及其子串(如s[7:])可以安全地共用数据,因此子串生成操作的开销低廉。这两种情况下都没有分配新内存

字符串字面量

go源文件总是按utf-8编码,并且习惯上go的字符串会按utf-8解读,所以在源码中我们可以将unicode码点写入字符串字面量
每个unicode码点的编码长度相同,都是32位。数据类型是int32/rune
utf-8以字节为单位对unnicode编码点作变长编码。utf-8是现行的一种unicode标准。