http:多余的response.WriteHeader调用

pka*_*mol 2 http go

我有一个HandleFunc,如果成功的话,我希望(显然)能够

  • 已发送200回复
  • 在回复中写一条信息性消息

但是以下代码片段(在快乐路径中执行)

    if fullRun {
        w.Write([]byte(successMsg))
        w.WriteHeader(http.StatusOK)
    }
Run Code Online (Sandbox Code Playgroud)

在我的应用程序日志中导致此消息

http: superfluous response.WriteHeader
Run Code Online (Sandbox Code Playgroud)

这是为什么?

200当尝试同时返回(文本)消息时,是否需要遵循另一种模式/实践?

Bur*_*dar 12

从文档中WriteHeader

如果未显式调用 WriteHeader,则第一次调用 Write 将触发隐式 WriteHeader(http.StatusOK)。因此显式调用 WriteHeader 主要用于发送错误代码。

所以你的第一个 write 调用已经调用了WriteHeader,并且你的第二个调用被忽略。

WriteHeader在写入正文之前调用,或者如果您发送的只是 StatusOK,则不要调用它。