avatar

目录
go 的[]rune 和 []byte 的区别

今天写 for 循环变量一个 string 类型的字符串时,用到了rune 类型,便简单整理一下 runebyte之间的区别。

首先来看,如果我们分别用 runebyte 输出一个字符串,会得到什么:

go
1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main() {
str := "viola"
fmt.Printf("%+v\n",[]rune(str))
fmt.Printf("%+v\n",[]byte(str))

}

然后输出结果是这样的:

go
1
2
[118 105 111 108 97]
[118 105 111 108 97]

emmmm, 这不一样吗? 但肯定有区别! 不然干嘛弄两个一样的东西,追一下源码发现, byte 是一个字节的,rune是四个字节的,那么,我们输出一下中文字符,就可以看出区别咯?

go
1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
)

func main() {
str := "许嵩"
fmt.Printf("%+v\n",[]rune(str))
fmt.Printf("%+v\n",[]byte(str))

}

结果:

go
1
2
[35768 23913]
[232 174 184 229 181 169]

果然…同时也可以看出,golang 中每个中文字符串占 3 个字节。所占字节长度不同,是byterune的最直接的区别。

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2021/06/26/golang-rune/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论