rune在一些流行编程语言中并没有对应的数据类型。因此首要需要先搞清楚这到底是个啥,否则这个大坑能埋很多人。且看代码
func main(){
str := "名称Tom"
fmt.Println(len(str))
fmt.Println(len([]byte(str)))
}
output: 9 9
输出的结果可以发现字符串的长度竟然和[]byte一样长。由此可以得出结论字符串就是[]byte,不带伪装那种。要想得出正确的字符串长度就需要rune个类型。
func main(){
str := "名称Tom"
fmt.Println(len(str))
fmt.Println(len([]rune(str)))
}
output: 9 5
这样的写法其实是很让人头痛的。一旦忘记这个坑在测试环节都有概率被漏掉。
现在回到标题上来,这三项的转换因其本质是一致的,所以转换的方式也简单。
str := "I am lilei"
//string 转[]byte
b := []byte(str)
//[]byte转string
str = string(b)
//string 转 rune
r := []rune(str)
//rune 转 string
str = string(r)