第5章 数据

5.1 字符串

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

type stingStruct struct {
str unsafe.Pointer
len int
}

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

注意:

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

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

  • byte方式:for i := 0; i < len(s); i++ {}
  • rune方式:for i, c := range s {}

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容