You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang如何返回带正确换行、无多余引号的原始HTTP响应

问题根因

返回结果不符合预期的核心问题是误用JSON编码器输出纯文本内容:
json.NewEncoder(w).Encode(string(b)) 会严格遵循JSON序列化规则处理输入字符串:自动给字符串两端包裹双引号,同时把换行符等特殊字符转义为\n形式的字面转义序列,这是JSON格式的标准行为,根本不适用于「原样返回请求体」的场景。

正确实现

你已经通过ReadAll拿到了请求体的原始字节,不需要做任何编码转换,直接把原始字节写入响应即可,同时补上缺失的请求体关闭逻辑、错误提前返回逻辑:

func Handler(w http.ResponseWriter, r *http.Request) {
    // 注意:Go 1.16+ 版本推荐使用 io.ReadAll 替代 ioutil.ReadAll,功能完全一致
    b, err := ioutil.ReadAll(r.Body)
    if err != nil {
        http.Error(w, "failed to read request body", http.StatusBadRequest)
        return
    }
    defer r.Body.Close() // 及时关闭请求体,避免资源泄漏

    w.Header().Set("Content-Type", "text/plain")
    w.WriteHeader(http.StatusOK)
    w.Write(b) // 直接写入原始字节,实现原样返回
}
验证结果

替换上述实现后再运行测试,位置(2)打印的响应内容会和位置(1)的控制台输出完全一致:

a
b
c

完全满足需求:

  • 响应内容无多余的包裹双引号
  • 保留真实换行效果,不会出现转义后的字面量\n

内容的提问来源于stack exchange,提问作者JS_Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:06:26