Go面试题更新 2026-08-05

在 Go 语言中,rune 和 byte 有何不同?请从类型定义、存储大小和用途等方面进行说明。

技术原理Go

考察说明

考察对 Go 语言基本类型 byte 和 rune 的理解,以及对字符编码与字符串处理基础知识的掌握程度。

回答思路

  1. 【回答框架 1】byte 是 uint8 的别名,表示一个字节,占 8 位,取值范围 0 到 255,通常用于处理 ASCII 字符或字节流。rune 是 int32 的别名,表示一个 Unicode 码点,占 32 位,取值范围覆盖所有 Unicode 字符。
  2. 【回答框架 2】在字符串处理中,Go 字符串底层是字节序列。使用索引访问字符串得到的是 byte(字节),而使用 for range 循环遍历字符串时,每次迭代得到的是 rune(Unicode 码点),这是因为 for range 会自动按 UTF-8 解码。
  3. 【回答框架 3】当需要处理中文、表情符号等多字节字符时,应使用 rune 类型。例如字符串中双引号内的汉字“中”在 UTF-8 编码下占 3 个字节,而作为 rune 只占一个码点。转换字符串和 rune 切片可以方便地对 Unicode 字符进行操作。
  4. 【回答框架 4】在实际编程中,若要对字符串中的字符进行逐个处理(例如统计字符个数),应使用 rune,因为直接对字节索引操作可能切割多字节字符。若进行网络传输、文件读写等底层操作,则使用 byte 和字节切片更合适。
  5. 【关键点 1】byte 是 uint8 的别名,占 1 字节;rune 是 int32 的别名,占 4 字节。
  6. 【关键点 2】rune 表示 Unicode 码点,用于处理多字节字符;byte 用于处理 ASCII 和字节流。
  7. 【关键点 3】字符串索引返回 byte,for range 返回 rune。
  8. 【易错点 1】混淆 byte 和 rune 在处理非 ASCII 字符时的差异,可能导致乱码或数据截断。
  9. 【易错点 2】误以为字符串长度等于字符个数,实际上 len(str) 返回的是字节数,而不是 rune 数。
  10. 【易错点 3】在对字符串进行切片操作时,若索引不是字符边界,可能得到不完整的字节序列。