字节面试:Go 字符串截取坑

简介: 本题揭示Go字符串底层是字节数组,`str[:3]`按字节截取会破坏UTF-8中文编码(如“测”占3字节),导致乱码。正确做法是先转`[]rune`再切片,确保按字符而非字节操作,这是Go开发必知的Unicode基础坑点。(239字)

面试官:str := "Go 测试",如果直接 str[:3] 会发生什么?
候选人:得到 "Go 测"
面试官:❌ 错,是乱码。

这道题考察的是 Go 字符串底层原理UTF-8 编码,属于必知必会的基础坑点。

1️⃣ 错误示范:直接按索引截取

package main

import "fmt"

func main() {
   
    str := "Go 测试"
    // ❌ 错误:直接按字节截取
    sub := str[:3] 
    fmt.Println(sub) 
}

输出结果:

Go  // 或者乱码,因为"测"字被截断了

2️⃣ 为什么会出现乱码?

🔍 核心原因:Go 字符串是 字节数组

在 Go 中,string 底层是 []byte,索引操作 str[i] 或切片 str[:n] 按字节(byte)计算,而不是按字符(character)计算。

📊 内存布局图解

字符串:"G"  "o"  "测"       "试"
字节数: 1    1    3         3
索引:  [0]  [1]  [2][3][4]  [5][6][7]
                ↑
           str[:3] 截到这里
  • G:ASCII 码,占 1 字节
  • o:ASCII 码,占 1 字节
  • :UTF-8 中文,占 3 字节
  • :UTF-8 中文,占 3 字节

str[:3] 取的是前 3 个字节

  1. G (完整)
  2. o (完整)
  3. 的第 1 个字节 (不完整)

结果:UTF-8 解码器遇到不完整的中文编码,显示为乱码()。

3️⃣ 正确做法:转 []rune 再截取

Rune 是 Go 中的 Unicode 码点类型,一个 rune 代表一个完整的字符。

package main

import "fmt"

func main() {
   
    str := "Go 测试"

    // ✅ 正确:先转 rune 切片,再截取
    runes := []rune(str)
    sub := string(runes[:3]) // 取前 3 个字符

    fmt.Println(sub) // 输出:Go 测
}

4️⃣ 面试加分项:性能优化

如果字符串很长,频繁转 []rune 会有内存开销。面试时可以补充:

  1. 短字符串:直接 []rune 转换,代码清晰。
  2. 长字符串/高性能场景:使用 utf8.RuneCountInString 先判断长度,或遍历 range 截取。
// 遍历 range 自动按 rune 解码
for i, r := range str {
   
    // i 是字节索引,r 是 rune
    if i == 3 {
    break } // 需配合逻辑控制
}

5️⃣ 一张表总结

操作 单位 适用场景 风险
str[:n] 字节 (byte) 纯英文/ASCII 中文乱码
[]rune(str)[:n] 字符 (rune) 含中文/多语言 内存开销
range str 字符 (rune) 遍历处理 性能较好

💡 记忆口诀

Go 串底层是字节,中文三字节别切。
要想截取不乱码,转成 rune 再操作。


✅ 避坑指南:涉及用户输入、国际化场景,永远不要假设 1 字符 = 1 字节

相关文章
|
13天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11452 124
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
2天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
3459 8
|
1天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
1327 2
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
12天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
7462 139
|
2天前
|
云安全 供应链 安全
Axios投毒事件:阿里云安全复盘分析与关键防护建议
阿里云云安全中心和云防火墙第一时间响应
1144 0
|
3天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
2天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2150 9
|
11天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
2550 9