-
panic用于异常中断,recover用于捕获异常。核心结论recover只能在defer中使用适合边界层错误处理不应滥用详细分析panic会逐层展开调用栈执行defer。recover可在defer中恢复程序运行。常见问题如何优化?业务错误优先使用error返回值。
-
Go 可通过 []byte(string) 将字符串转为字节数组。核心结论类型转换即可会产生拷贝常用于 IO 操作详细分析字符串和字节切片底层不同。转换后可修改字节内容。常见问题是否有零拷贝方式?不安全,不推荐。
-
context 是 Go 后端工程中的核心组件。核心结论控制请求生命周期统一取消信号传递请求范围数据详细分析context 可避免 goroutine 泄漏。是微服务和 API 的基础能力。常见问题context 能当全局变量吗?不推荐。
-
errors.Is 支持错误链判断。核心结论支持 wrapped error兼容 fmt.Errorf更健壮详细分析直接比较会忽略包装层。Is 会递归检查。常见问题errors.As 用来做什么?用于类型断言。
-
Go 可以写脚本,但并非主要定位。核心结论更偏向工程化启动成本略高适合长期维护工具详细分析相比脚本语言,Go 更适合构建稳定工具。一次开发,多次使用是其优势。常见问题Go 能替代 Shell 吗?在复杂场景下可以。
-
系统化准备是 Go 面试关键。核心结论理解并发掌握常见坑总结项目详细分析项目比框架更重要。能讲清设计取舍是加分项。常见问题需要刷很多题吗?不必。
-
循环中频繁使用time.After可能导致内存泄漏。核心结论每次调用都会创建新的Timer未消费的Timer会堆积应使用time.NewTimer复用详细分析在高频循环中调用time.After增加GC压力,可能导致程序内存占用升高。典型错误是内存使用不断增长。常见问题如何优化?使用time.NewTimer并手动Stop与Reset。
-
Go语言的map在负载因子超过约6.5或溢出桶数量过多时触发扩容,并采用渐进式迁移而不是一次性重哈希。map底层使用哈希桶结构,每个桶可存储8个键值对。当元素增加导致负载过高时,会分配新的桶数组。旧桶中的数据不会一次性迁移,而是在后续写操作中逐步搬迁,减少性能抖动。同时删除元素过多时也可能触发等量扩容优化结构。相似问题及优化建议:map为什么不是线程安全的?因为底层未加锁。如何减少扩容带来的性能问题?可以提前指定容量。高并发场景下如何使用map?可使用sync.Map或加Mutex保护。
-
Go 新手不需要一开始就学习并发。核心结论先掌握基础语法理解顺序执行并发可后期学习详细分析并发是 Go 的优势,但并非入门必须。基础不牢容易造成理解混乱。常见问题不学并发算会 Go 吗?算入门,但不算进阶。
-
interface 的 nil 包含类型和值两个部分。核心结论类型不为空值为空整体不等于 nil详细分析var err error = (*MyErr)(nil)。err != nil。常见问题如何避免?返回真正的 nil。
-
Go 对代码风格要求较为统一和严格。核心结论官方格式化工具风格统一降低沟通成本详细分析Go 提供自动格式化工具,减少人为争议。统一风格有助于团队协作。常见问题可以不用官方格式化吗?不建议。
-
Go语言的channel底层由hchan结构体实现,内部包含循环队列、发送队列和接收队列,用于实现协程之间的安全通信。当向channel发送数据时,如果缓冲区未满则直接写入;如果已满则将当前goroutine加入发送等待队列。接收数据时若缓冲区为空,则加入接收等待队列。底层通过锁保证并发安全,并结合调度器实现阻塞与唤醒机制。相似问题及优化建议:无缓冲channel和有缓冲channel区别是什么?channel为什么会阻塞?如何避免channel死锁?合理关闭channel并控制发送接收顺序。
-
Go 语言不支持函数重载是为了保持代码简洁和可读性。核心结论避免歧义降低学习成本减少复杂设计详细分析在 Go 中,每个函数名都应具有明确含义。通过不同函数名替代重载,可以让代码更清晰。常见问题那参数不同怎么处理?通常通过结构体或接口解决。
-
未检查context Done可能导致goroutine阻塞。核心结论结合select监听context.Done避免无限等待及时退出goroutine详细分析HTTP请求、数据库或RPC操作未处理context取消,会导致阻塞和资源泄漏。典型错误是goroutine无法退出或请求长时间卡住。常见问题如何优化?在阻塞操作中加入select判断ctx.Done(),超时及时返回。
-
新手不需要一开始就学习 Go 并发。核心结论先学基础语法再理解程序执行最后接触并发详细分析并发是 Go 的优势,但也是理解成本较高的部分。基础稳固后再学习效果更好。常见问题什么时候学 Goroutine 合适?完成基础项目之后。