go中字符类型
Go 语言中的字符类型主要有两种:
- byte (uint8 的别名)
- 用于表示 ASCII 字符
- 占用 1 个字节
- 用单引号表示,如 'a'
- rune (int32 的别名)
- 用于表示一个 Unicode 码点(code point)
- 占用 4 个字节
- 用单引号表示,如 '中'
- 用于处理中文、日文等 UTF-8 编码的字符
示例代码:
// byte 类型
var b byte = 'a'
fmt.Printf("%T, %v\n", b, b) // uint8, 97
// rune 类型
var r rune = '中'
fmt.Printf("%T, %v\n", r, r) // int32, 20013
// 字符串遍历
str := "hello 世界"
// 按字节遍历
for i := 0; i < len(str); i++ {
fmt.Printf("%c ", str[i])
}
// 按 rune 遍历
for _, c := range str {
fmt.Printf("%c ", c)
}
需要注意的是:
- Go 语言的字符串底层是字节序列
- 处理中文等非 ASCII 字符时,应该使用 rune 类型
- 使用 range 遍历字符串时会自动按 rune 解码
- 直接用下标访问字符串得到的是字节
这样的设计让 Go 能够很好地处理各种字符集的文本。通过 rune 类型,我们可以方便地处理 Unicode 字符,而 byte 类型则用于处理 ASCII 字符和底层字节操作。