Go 高频追问
1. 你很多业务经验在 PHP 上,为什么还敢面 Go 岗?
推荐回答
因为我不是把 Go 当成“补充语法”,而是实际用在了更适合它的场景上。 在我的项目里,Go 主要承接实时链路、高并发处理、Kafka 消费者、行为回传、批量处理和一些服务化能力。 所以我不是所有业务都用 Go,但我知道什么场景 Go 更值钱。
2. Go 在你项目里最典型的价值是什么?
推荐回答
主要是三点:
- 更适合长生命周期服务
- 更适合高并发和消费者场景
- 更适合把重脚本、重循环、重 IO 的能力拆出来
项目里怎么讲
- 推广 ROI 线里的实时处理、行为回传、Kafka 消费
- 原来 PHP 里高并发或耗时重的部分迁到 Go
3. goroutine 起太多有什么问题,怎么控制?
推荐回答
goroutine 虽然轻量,但不是零成本。起太多会带来:
- 调度压力
- 内存占用
- 下游资源打爆
- 日志和排查困难
我一般会用 worker pool、信号量、channel 或限流器控制并发,而不是无脑开 goroutine。
4. channel 在项目里你怎么用,而不是只会背概念?
推荐回答
我更看重 channel 的同步语义和任务编排能力。 像 worker pool、任务分发、结果汇总、超时控制,这类场景 channel 很适合。 但如果只是简单共享状态,我不会为了用 channel 而用。
5. context 在项目里最重要的作用是什么?
推荐回答
最重要的是控制请求生命周期:
- 超时
- 取消
- 透传 trace 信息
在多服务调用、模型调用、外部接口调用里,如果没有 context,超时和取消会很难治理。
6. Go 为什么适合 Kafka 消费者?
推荐回答
因为这类场景通常是:
- 长时间运行
- 并发消费
- 需要稳定吞吐
- 需要配合超时、重试、批处理
Go 在这些方面的运行模型更适合,服务边界也更清晰。
7. Go 并发里你最担心什么问题?
推荐回答
我最担心的不是“写不出来”,而是:
- 共享状态竞争
- goroutine 泄漏
- 下游被打挂
- 错误处理不完整
- 重试把系统放大
所以我会更关注并发边界和治理,而不是单纯追求并发数量。
8. 如果消费者积压了,你怎么处理?
推荐回答
我会先看:
- 是生产太快还是消费太慢
- 是单条处理逻辑太重还是并发度不够
- 是下游慢还是代码本身有问题
- 是否需要批处理、扩容或拆分 partition
推广 ROI 这类链路里,真正重要的不是“积压了加机器”,而是先找到瓶颈在哪一层。
9. Go 和 PHP 在你的系统里是怎样协作的?
推荐回答
我更倾向按职责分工,不按语言争论。 PHP 主要承接复杂业务规则、后台和配置,Go 主要承接实时链路、消费者、高并发和批处理。 这样两边都做自己最合适的部分,系统整体更稳定。
10. 如果对方问你“你是不是纯 Go 不够深”,你怎么接?
推荐回答
我不会把自己包装成纯 Go 背景,但我在 Go 里做的部分都是更偏工程核心的:实时链路、消费者、高并发处理和服务化能力。 而且我有很强的复杂业务和系统落地经验,所以我能把 Go 用到正确的地方,而不只是写一堆接口。