返回顶部
首页 > 资讯 > 后端开发 > GO >解决Golang中ResponseWriter的一个坑
  • 694
分享到

解决Golang中ResponseWriter的一个坑

2024-04-02 19:04:59 694人浏览 八月长安
摘要

在使用Context.ResponseWriter中的Set/WriteHeader/Write这三个方法时,使用顺序必须如下所示,否则会出现某一设置不生效的情况。 ctx.Re

在使用Context.ResponseWriter中的Set/WriteHeader/Write这三个方法时,使用顺序必须如下所示,否则会出现某一设置不生效的情况。


ctx.ResponseWriter.Header().Set("Content-type", "application/text")
 ctx.ResponseWriter.WriteHeader(403)
 ctx.ResponseWriter.Write([]byte(resp))

如1:


ctx.ResponseWriter.Header().Set("Content-type", "application/text")
 ctx.ResponseWriter.Write([]byte(resp))
 ctx.ResponseWriter.WriteHeader(403)

会导致返回码一直是200

补充:Go里w http.ResponseWriter,调用w.Write()方法报错

Go里w Http.ResponseWriter写入报错

http: request method or response status code does not allow

1. 下面是报错截图

2. 点进去Write方法

它首先是一个接口;

由于它是在HTTP WEB服务器的应用场景,所以它具体的实现方法在net/http/server.go里:


func (w *response) Write(data []byte) (n int, err error) {
 return w.write(len(data), data, "")
}

再点进去,函数里你会发现有一个关键的判断


// 其中ErrBodyNotAllowed的
// 代码内容
// ErrBodyNotAllowed = errors.New("http: request method or response status code does not allow body")
if !w.bodyAllowed() {
 return 0, ErrBodyNotAllowed
}
 

点进去,发现它在没有设置Header时会panic,当然这跟我们当前要讨论的问题关系不大,关键在bodyAllowedForStatus()方法


func (w *response) bodyAllowed() bool {
 if !w.wroteHeader {
  panic("")
 }
 return bodyAllowedForStatus(w.status)
}

再点,终于看到了,当设置状态码为【100,199】、204、304就会报这个错,而我刚好设置的状态码就是204,我把它改成200重新试下,问题解决。


func bodyAllowedForStatus(status int) bool {
 switch {
 case status >= 100 && status <= 199:
  return false
 case status == 204:
  return false
 case status == 304:
  return false
 }
 return true
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: 解决Golang中ResponseWriter的一个坑

本文链接: https://lsjlt.com/news/124745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解决Golang中ResponseWriter的一个坑
    在使用Context.ResponseWriter中的Set/WriteHeader/Write这三个方法时,使用顺序必须如下所示,否则会出现某一设置不生效的情况。 ctx.Re...
    99+
    2024-04-02
  • 解决golang中container/list包中的坑
    golang中list包用法可以参看这篇文章 但是list包中大部分对于e *Element进行操作的元素都可能会导致程序崩溃,其根本原因是e是一个Element类型的指针,当然其也...
    99+
    2024-04-02
  • 使用@JsonFormat的一个坑及解决
    目录使用@JsonFormat的一个坑及解决解决如下JsonFormat的时间格式踩坑使用@JsonFormat的一个坑及解决 spring boot项目 ,mysql数据库的dat...
    99+
    2024-04-02
  • 使用fileReader的一个坑及解决
    目录关于fileReader的一个坑fileReader在ios上面的坑(图片转base64)关于fileReader的一个坑 在用fileReader做图片浏览时, 使用base6...
    99+
    2024-04-02
  • 解决golang 反射interface{}做零值判断的一个重大坑
    在对float零值判断时往往只需要和0做==即可,所以曾经int和float都用==0来做对比, 比如下方: in := 0. var tmp interface...
    99+
    2024-04-02
  • Golang的strings.Split()坑怎么解决
    这篇文章主要介绍“Golang的strings.Split()坑怎么解决”,在日常操作中,相信很多人在Golang的strings.Split()坑怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Gol...
    99+
    2023-06-30
  • 解决Golang 中使用WaitGroup的那点坑
    sync.WaitGroup对于Golang开发者来说并不陌生,其经常作为多协程之间同步的一种机制。用好它势必会让你事半功倍,但是一旦错用将引发问题。 关于WaitGroup的使用网...
    99+
    2024-04-02
  • Golang中JSON遇到的坑如何解决
    本篇内容主要讲解“Golang中JSON遇到的坑如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang中JSON遇到的坑如何解决”吧!空指针会被解析成字符串"null&qu...
    99+
    2023-07-05
  • Java中HashMap中的一个坑
    目录前言问题展示原因分析解决方案LinkedHashMap 的魔力总结前言 最近公司的系统要增加一个新的列表展示功能,功能本身难度并不大,但遇到了一个很“奇怪&rdquo...
    99+
    2024-04-02
  • 解决spring boot 配置文件后缀的一个坑
    目录spring boot 配置文件后缀的一个坑spring boot配置文件支持 properties和yml从新创建一个demo试试 spring boot 配置文件后缀导致启动...
    99+
    2024-04-02
  • 解决golang 关于全局变量的坑
    学习golang不久,在定义全局变量的时候遇见了坑。写个小例子,增强记忆。 错误版本 var p int func main() { p, err := test(4) if...
    99+
    2024-04-02
  • Python asyncio的一个坑
    我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这种错误了: def do_not_raise(user_defined_logic): tr...
    99+
    2024-04-02
  • 解决element-uiel-checkbox的一些坑
    目录element-ui el-checkbox的一些坑el-checkbox的基本使用,避坑指南总结element-ui el-checkbox的一些坑 <el-checkb...
    99+
    2023-05-16
    element-ui el-checkbox el-checkbox的一些坑 el-checkbox的坑
  • 一个@Component注解引发的大坑
    目录一个@Component注解引发的大坑问题是这样的思考对spring @component注解的理解@Component注解的使用注解的类测试的类一个@Component注解引发...
    99+
    2024-04-02
  • Golang解析JSON遇到的坑及解决方法
    目录写在前面空指针会被解析成字符串"null"int类型会被解析成float64写在前面 在写go的时候经常用到序列化、反序列化,记录一下遇到过的坑。 空指针会被...
    99+
    2023-02-26
    Golang解析JSON Go 解析JSON Go JSON
  • 详解Golang时间处理的踩坑及解决
    目录简介类型时区小心有坑时间解析的使用场景时间操作获取当前时间时区设置时间格式化(时间类型转字符串)时间类型转时间戳时间戳转时间类型时间字符串转时间类型时间计算获取时间类型具体内容时...
    99+
    2023-01-11
    Golang时间处理踩坑 Golang 时间处理 Go 时间处理
  • Golang时间处理中容易踩的坑分析解决
    目录简介类型时区小心有坑时间解析的使用场景时间操作获取当前时间时区设置时间格式化(时间类型转字符串)时间类型转时间戳时间戳转时间类型时间字符串转时间类型时间计算获取时间类型具体内容时...
    99+
    2023-01-11
    Golang时间处理踩坑解决 Go 时间处理
  • 解决golang时间字符串转time.Time的坑
    字符串转时间一定要通过 time.ParseInLocation 不能直接用Parse todayZero, _ := time.ParseInLocation("2006-01...
    99+
    2024-04-02
  • golang recover函数使用的坑怎么解决
    这篇文章主要讲解了“golang recover函数使用的坑怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang recover函数使用的坑怎么解决”吧!一...
    99+
    2023-07-05
  • 记录一个van-list不断onLoad加载的坑及解决
    目录van-list不断onLoad加载的坑我这里出现不断加载的原因是van-list列表下拉加载更多onLoad事件重点总结van-list不断onLoad加载的坑 van-lis...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作