go runtime_error ai_generated true

panic: http: Server closed

ID: go/httptest-server-close-panic

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
0Evidence
2024-03-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
1.21 active

Root Cause

调用 httptest.Server.Close() 后,仍有 goroutine 尝试向该服务器发送请求,导致底层连接被关闭,触发 panic。

generic

中文

关闭 httptest 测试服务器后,仍有并发请求在途,访问已关闭的监听器引发 panic。

Workarounds

  1. 95% success
    使用 sync.WaitGroup 确保所有请求完成后关闭服务器
  2. 85% success
    设置 server.Config.ReadTimeout 和 WriteTimeout,避免请求无限期挂起

Dead Ends

Common approaches that don't work:

  1. 90% fail

    httptest.Server 关闭后不可复用,连接池中的连接已失效,重试只会导致相同 panic

  2. 75% fail

    defer 在函数结束时才执行,但未等待所有 goroutine 结束,仍可能触发 panic

  3. 60% fail

    panic 是致命的,捕获后程序状态可能不一致,且掩盖了真正的并发问题