在 Go 中字符串是一个使用频率很高的数据类型,通常的操作有拼接和切片操作,拼接操作不是这篇文章的重点,这里就不做深入讨论,这里聊聊字符串的切片操作。
出现这种现象的本质原因是因为 string 在 Go 的实现方式有关,在 Go 中 string 其实只是一个可读的字节数组切片而已,是不是真的是这样?符合预期,也侧面论证了上面的观点
在了解到 Go 中字符串长度并不是简单的像 Python 等语言那样,显然切片也不能直接根据肉眼看到的字符串长度进行切片,比如上面的例子中sample[:2] 显然结果不太可能是 "你好"
有的,使用 rune
结果输出:
出现上面现象的原因本质是因为编码问题,Go 默认是 UTF-8 的编码,但是汉字显然不在其列,所以导致显示异常,而 rune 则代表着 Unicode 编码,因而变现正常起来。