rune 类型
在 Go 语言中,rune
是一种表示 Unicode 字符的类型。实际上,rune
是 int32
的别名,用于表示 Unicode 字符集中的一个字符。这使得 rune
可以用来处理任意 Unicode 字符,而不仅仅是 ASCII 字符。
# rune 的基本概念
- 定义:
rune
是int32
类型的别名。它的值范围是从0
到0x10FFFF
(Unicode 字符的最大值),也包括一些控制字符。 - 用途:
rune
常用于表示单个字符,特别是在处理多字节字符时。例如,中文、日文等字符通常采用多个字节表示,而rune
可以很好地处理这些字符。
# 使用示例
以下是一个使用 rune
的简单示例:
package main
import (
"fmt"
)
func main() {
var ch rune = 'a' // 使用单引号表示单个字符
fmt.Printf("rune: %c, Unicode: %U\n", ch, ch)
var ch2 rune = '中' // 中文字符
fmt.Printf("rune: %c, Unicode: %U\n", ch2, ch2)
// 遍历字符串中的字符
str := "Hello, 世界"
for _, r := range str {
fmt.Printf("Character: %c, Unicode: %U\n", r, r)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 输出结果
rune: a, Unicode: U+0061
rune: 中, Unicode: U+4E2D
Character: H, Unicode: U+0048
Character: e, Unicode: U+0065
Character: l, Unicode: U+006C
Character: l, Unicode: U+006C
Character: o, Unicode: U+006F
Character: ,, Unicode: U+002C
Character: , Unicode: U+0020
Character: 世, Unicode: U+4E16
Character: 界, Unicode: U+754C
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 注意事项
字符串与 rune:在 Go 中,字符串是以字节的切片表示的,而
rune
是以 Unicode 字符的切片表示的。当遍历字符串时,使用for range
可以安全地获取到每一个字符对应的rune
值。内存占用:由于
rune
是int32
类型,单个rune
占用 4 个字节,而不是 1 个字节(如byte
)。在处理大文本或大量字符时,需要注意内存占用。对比和转换:可以使用
string(r)
将rune
转换为字符串,反之则使用[]rune(str)
将字符串转换为rune
切片。处理unicode或utf-8字符: 相当int32golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8
byte 等同于int8,常用来处理ascii字符
rune 等同于int32,常用来处理unicode或utf-8字符
编辑 (opens new window)
上次更新: 2024/09/13, 11:59:12