前言
在学习golang的时候,对于中文字符串的切片让我感到困惑,如:
package main
import "fmt"
func main () {
text:= "在学习golang的时候,对于中文字符串的切片让我感到困惑"
fmt.Println(len(text))
}
>>> 75
由于之前的语言是python,对这样的用法很不习惯,在切分的时候,如果对中文切分不当,可能导致乱码。这时就发现了rune数据类型。
官方文档解释
// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
//int32的别名,几乎在所有方面等同于int32
//它用来区分字符值和整数值
type rune = int32
*golang中的字符串底层实现是通过byte数组的
中文字符在unicode下占2个字节,在utf-8编码下占3个字节,golang默认编码是utf-8。
默认的byte 等同于int8,常用来处理ascii字符
而rune 等同于int32,常用来处理unicode或utf-8字符*
因为rune几乎等同于int32,所以通过rune类型转换处理,就能够正常处理含有中文的字符啦:
package main
import "fmt"
func main () {
text:= "在学习golang的时候,对于中文字符串的切片让我感到困惑"
cn_text := []rune(text)
fmt.Println(len(cn_text))
}
>>> 29