部署 Go 服务时,经常能在退出日志中看到一句 server stopped: context canceled。
它说明 Context 已经取消,却没有回答最关键的问题:程序究竟收到了用户按下 Ctrl+C 产生的 SIGINT,还是容器平台发来的 SIGTERM?前者可能是开发者主动结束程序,后者则可能来自滚动发布、Pod 驱逐或系统关机。
Go 1.26 改进了 signal.NotifyContext。由系统信号触发取消时,开发者可以通过 context.Cause 获取包含信号信息的原因,退出日志不必再只剩一句含糊的 context canceled。