01
Go HTTP 服务优雅停机:生命周期流转与生产环境缺陷排查
直接 os.Exit 会让在途请求报出 EOF 与 Connection Reset。本文对比 Close 与 Shutdown 的状态机行为、signal.Notify 与 signal.NotifyContext 两代范式,逐一排查僵尸进程、log.Fatal 断链、复用已取消 Context、误判 ErrServerClosed、二次信号失效五个生产缺陷,并给出生产级停机模板。
WRITING / ENGINEERING NOTES
记录 Go 后端、React/Next.js 与全栈项目中的架构决策、实现细节与工程复盘。
主题
归档
直接 os.Exit 会让在途请求报出 EOF 与 Connection Reset。本文对比 Close 与 Shutdown 的状态机行为、signal.Notify 与 signal.NotifyContext 两代范式,逐一排查僵尸进程、log.Fatal 断链、复用已取消 Context、误判 ErrServerClosed、二次信号失效五个生产缺陷,并给出生产级停机模板。
把 wg.Add(1) 写进 go func 内部,主协程可能在计数器仍为 0 时直接穿透 wg.Wait(),子协程随调用栈一起被销毁。本文从 GMP 调度与 runtime.newproc 的入队时序出发解释这场微秒级竞速,并给出计数前置与循环外批量 Add 的正确写法。