Go面试题更新 2026-08-03

在 Go 语言中,如果要翻转一个同时包含中文、数字和英文字母的字符串,你会采用什么方法?请说明其原理。

考察说明

考查对 Go 字符串本质(字节序列)和 rune 类型切片处理多字节字符的理解。

回答思路

  1. 【回答框架 1】Go 中的字符串本质是字节切片,存储的是 UTF-8 编码的字节序列。中文字符通常占 3 个字节,直接对字符串进行字节级反转会破坏字符的编码边界,导致乱码。
  2. 【回答框架 2】正确的做法是先将字符串转换为 []rune 切片。rune 代表一个 Unicode 码点,能够完整表示每个字符,包括中文、数字和英文字母。转换后,使用双指针或循环交换切片中的元素,完成翻转。
  3. 【回答框架 3】翻转完成后,将 []rune 转回 string。注意,转换过程中会进行 UTF-8 编码,保证输出正确。也可以使用 range 循环遍历字符串获得 rune,但直接 []rune 转换更简洁。
  4. 【回答框架 4】边界情况:空字符串、仅包含 ASCII 字符的字符串也能正确处理。性能上,[]rune 转换需要 O(n) 时间和额外空间,但这是翻转多字节字符串的必要代价。
  5. 【关键点 1】字符串底层是字节切片,不能直接按字节反转,否则会破坏 UTF-8 编码。
  6. 【关键点 2】先将字符串转为 []rune,再反转切片元素。
  7. 【关键点 3】反转完成后转回 string 得到正确结果。
  8. 【易错点 1】避免使用 for i := 0; i < len(s); i++ 遍历,因为 len(s) 是字节长度,会逐个字节处理导致乱码。
  9. 【易错点 2】不能简单地按字节交换,会导致中文乱码。