go type_error ai_generated true

http:ResponseWriter 未实现 http.Flusher

http: ResponseWriter does not implement http.Flusher

ID: go/net-http-flusher-not-available

其他格式: JSON · Markdown 中文 · English
85%修复率
85%置信度
1证据数
2023-09-20首次发现

版本兼容性

版本状态引入弃用备注
Go 1.15 active
Go 1.16 active
Go 1.17 active
Go 1.18 active
Go 1.19 active
Go 1.20 active
Go 1.21 active
Go 1.22 active
Go 1.23 active

根因分析

在包装或替换原始对象的 ResponseWriter 上使用 http.Flusher,例如使用未保留 Flusher 接口的自定义中间件时。

English

Using http.Flusher on a ResponseWriter that wraps or replaces the original object, such as when using a custom middleware that doesn't preserve the Flusher interface.

generic

官方文档

https://pkg.go.dev/net/http#Flusher

解决方案

  1. Implement Flusher interface in your custom ResponseWriter wrapper by embedding the original writer and forwarding Flush()
  2. Use http.ResponseController from Go 1.20+ to enable flush without direct Flusher assertion
  3. Avoid wrapping ResponseWriter if possible; modify the handler to flush via the original writer before wrapping

无效尝试

常见但无效的做法:

  1. 85% 失败

    The assertion fails because the wrapper replaces the original writer; you must assert on the wrapper.

  2. 70% 失败

    The original writer supports Flusher, but the wrapper doesn't pass it through; pre-check doesn't help.

  3. 90% 失败

    Flushing is critical for streaming responses; ignoring it breaks functionality like SSE or chunked transfer.