在使用golang进行网络请求时,偶尔会遇到请求重定向的问题。这个问题可能是由于多余的错误导致的。php小编西瓜为你解答如何解决这个问题,以确保网络请求的顺利进行。让我们一起来看看吧!
问题内容
我从 golang 中得到了一个非常奇怪的行为。
我想用发布请求做一些事情,然后重定向请求。 取决于随机因素......它是否有效。
当它不起作用时,我收到该错误:
“http:多余的响应。来自...的WriteHeader调用”
函数越深,重定向起作用的可能性就越小。
- 据我所知,我只重定向一次(或零次......)
- 在重定向之前我不会写入标头。
- 在重定向之前我对 writer 所做的唯一一件事就是将其放入地图中。
我不想在这里复制所有代码,所以我会总结一下。
处理程序处理 POST 请求,在名为 demand
的映射中传递请求数据。
然后解析请求以获取表单值,并将其保存到 demand
中
它被发送到通道中。
需求图从通道传递到以下函数:
func answer_login(demand map[string]any) map[string]any { writer := demand["writer"].(http.ResponseWriter) request := demand["request"].(*http.Request) http.Redirect(writer, request, "/", 302) // <- if it is here it works (at95 %) // some mundane code (printing stuff, really) . . . // http.Redirect(writer, request, "/", 302) // <- if it is here it works (only at 20 %) ...
如果我按下 F5,它最终会正确重定向。
我尝试简单地在 writer.Write([]byte("same issues"))
中写入一些内容,同样的问题。
我在 Linux 上,尝试了不同的浏览器。
问题:这是一个(已知)错误吗?
有什么解决办法吗?
(强制写入客户端)
谢谢
解决方法
我终于了解了这个问题并找到了解决方案。
问题:
因此,编写器请求在与实际处理函数不同作用域的函数中进行处理和重定向。 以及当实际处理函数结束时。某些上下文因素使编写者请求过期:您无法再重定向或响应该请求。 这是在文档中写的:
https://pkg.go.dev/net/http p>
关于它有时起作用的一个可能的解释是......也许“通道传输、处理和重定向”发生得足够快(有时)并且实际处理程序功能尚未关闭。
在处理数据之前阻止处理程序函数会破坏并行异步处理的目的。
所以我最终将所有内容都嵌套在处理程序函数中。
欢迎聪明的人纠正我或分享关于上下文和 ResponseWriters 的更好的解释。
以上是golang 请求重定向问题(多余的错误)的详细内容。更多信息请关注PHP中文网其他相关文章!

whentestinggocodewithinitfunctions,useexplicitseTupfunctionsorseParateTestFileSteSteTepteTementDippedDependendendencyOnInItfunctionsIdeFunctionSideFunctionsEffect.1)useexplicitsetupfunctionStocontrolglobalvaribalization.2)createSepEpontrolglobalvarialization

go'serrorhandlingurturnserrorsasvalues,与Javaandpythonwhichuseexceptions.1)go'smethodensursexplitirorhanderling,propertingrobustcodebutincreasingverbosity.2)

AnefactiveInterfaceoisminimal,clear and promotesloosecoupling.1)minimizeTheInterfaceForflexibility andeaseofimplementation.2)useInterInterfaceForeabStractionTosWapImplementations withCallingCallingCode.3)

集中式错误处理在Go语言中可以提升代码的可读性和可维护性。其实现方式和优势包括:1.将错误处理逻辑从业务逻辑中分离,简化代码。2.通过集中处理错误,确保错误处理的一致性。3.使用defer和recover来捕获和处理panic,增强程序健壮性。

Ingo,替代词Inivuntionsionializatializatializationfunctionsandsingletons.1)customInitializationfunctions hallowexpliticpliticpliticconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconcontirization curssementializatizatupsetups.2)单次固定元素限制ininconinconcurrent

Gohandlesinterfacesandtypeassertionseffectively,enhancingcodeflexibilityandrobustness.1)Typeassertionsallowruntimetypechecking,asseenwiththeShapeinterfaceandCircletype.2)Typeswitcheshandlemultipletypesefficiently,usefulforvariousshapesimplementingthe

Go语言的错误处理通过errors.Is和errors.As函数变得更加灵活和可读。1.errors.Is用于检查错误是否与指定错误相同,适用于错误链的处理。2.errors.As不仅能检查错误类型,还能将错误转换为具体类型,方便提取错误信息。使用这些函数可以简化错误处理逻辑,但需注意错误链的正确传递和避免过度依赖以防代码复杂化。

tomakegoapplicationsRunfasterandMorefly,useProflingTools,leverageConCurrency,andManageMoryfectily.1)usepprofforcpuorforcpuandmemoryproflingtoidentifybottlenecks.2)upitizegorizegoroutizegoroutinesandchannelstoparalletaparelalyizetasksandimproverperformance.3)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境