Go 中如何正确关闭 HTTP 服务的空闲连接:一个容易被忽略的陷阱
在 Go 里用 http.Server 启动服务很简单,但关闭时如果只调用 Shutdown 就以为万事大吉,空闲连接可能还会被复用,导致 Close 之后仍有连接停留在 TIME_WAIT,甚至在测试里出现 httptest.Server 关闭后端口仍被占用的情况。尤其是当服务使用了 http.Client 的长连接、或者网关层做了连接池时,关闭顺序和连接状态的处理会直接影响进程能否干净退出。这篇文章从一次测试环境里 Shutdown 后进程卡住的现象出发,梳理 net/http 中 Server.Shu...