Go 高频追问

1. 你很多业务经验在 PHP 上,为什么还敢面 Go 岗?

推荐回答

因为我不是把 Go 当成“补充语法”,而是实际用在了更适合它的场景上。 在我的项目里,Go 主要承接实时链路、高并发处理、Kafka 消费者、行为回传、批量处理和一些服务化能力。 所以我不是所有业务都用 Go,但我知道什么场景 Go 更值钱。


2. Go 在你项目里最典型的价值是什么?

推荐回答

主要是三点:

  1. 更适合长生命周期服务
  2. 更适合高并发和消费者场景
  3. 更适合把重脚本、重循环、重 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. 如果消费者积压了,你怎么处理?

推荐回答

我会先看:

  1. 是生产太快还是消费太慢
  2. 是单条处理逻辑太重还是并发度不够
  3. 是下游慢还是代码本身有问题
  4. 是否需要批处理、扩容或拆分 partition

推广 ROI 这类链路里,真正重要的不是“积压了加机器”,而是先找到瓶颈在哪一层。


9. Go 和 PHP 在你的系统里是怎样协作的?

推荐回答

我更倾向按职责分工,不按语言争论。 PHP 主要承接复杂业务规则、后台和配置,Go 主要承接实时链路、消费者、高并发和批处理。 这样两边都做自己最合适的部分,系统整体更稳定。


10. 如果对方问你“你是不是纯 Go 不够深”,你怎么接?

推荐回答

我不会把自己包装成纯 Go 背景,但我在 Go 里做的部分都是更偏工程核心的:实时链路、消费者、高并发处理和服务化能力。 而且我有很强的复杂业务和系统落地经验,所以我能把 Go 用到正确的地方,而不只是写一堆接口。