gpt4 book ai didi

http.ResponseWriters 的 Golang 映射

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:28 27 4
gpt4 key购买 nike

我正在尝试创建一个存储 http.ResponseWriters 的映射,以便稍后在单独的线程完成相关计算后写入它们。该 map 在我的主要定义如下:
jobs := make(map[uint32]http.ResponseWriter)
然后我将这个映射传递给一个句柄函数,如下所示:

r.HandleFunc("/api/{type}/{arg1}", func(w http.ResponseWriter, r *http.Request) {
typ, _ := strconv.Atoi(mux.Vars(r)["type"])
AddReqQueue(w, ReqQueue, typ, mux.Vars(r)["arg1"], jobs, ids)
}).Methods("get")

之后我处理 reuqeuest 并将其添加到 channel :

func AddReqQueue(w http.ResponseWriter, ReqQueue chan mssg.WorkReq, typ int, arg1 string, jobs map[uint32]http.ResponseWriter, ids []uint32) {
var id uint32
id, ids = ids[0], ids[1:] // get a free work id
jobs[id] = w
fmt.Println("Adding req to queue")
ReqQueue <- mssg.WorkReq{Type: uint8(typ), Arg1: arg1, WId: id}
}

在这个函数中我已经测试并且能够将数据写入 ReponseWriter,但是稍后当我尝试在以下位置使用 map 时:

func SendResp(RespQueue chan mssg.WorkResp, jobs map[uint32]http.ResponseWriter) {
for {
resp := <-RespQueue
jobs[resp.WId].Header().Set("Content-Type", "text/plain")
_, err := jobs[resp.WId].Write(resp.Data) // ERROR IS COMING FROM HERE
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
}
}

这是行不通的。无论我预先设置标题还是尝试编写(即使只是我硬编码的简单字符串)我都会出错

Conn.Write wrote more than the declared Content-Length

我知道我正在访问映射中的正确结构,看起来好像 ReponseWriter 已经脱离上下文或已损坏,而且我知道 header 不应该真的很重要因为这是我第一次调用 Write(),因此它应该为我创建 header 。

最佳答案

@elithrar 是正确的。我不知道 http.ResponseWriter 对象在处理程序退出后变得无效。如果我只是强制我的处理程序等待,它就可以正常工作。

关于http.ResponseWriters 的 Golang 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com