gpt4 book ai didi

dictionary - 如何扩充 ResponseWriter 的 Header() 返回的映射

转载 作者:行者123 更新时间:2023-12-02 18:14:15 24 4
gpt4 key购买 nike

所以我确信我想在这里作弊,但是 ResponseWriter 文档有一个方法“Header()”,它返回它正在使用的 Header 对象。 https://pkg.go.dev/net/http#ResponseWriter.Header

现在我从其他地方获得了 http.Response,我想将其中的所有 header 复制到我的 ResponseWriter 中。

现在,我可以使用这样的 for 循环:

for k := range resp.Header 
w.Header().Add(k, resp.Header.Get(k))
}

从逻辑上讲,将引用从 ResponseWriter 的 header 更改为 Response 的 header 对我来说也是有意义的,但是 ResponseWriter 类型似乎正在积极尝试阻止我这样做。

想到了这样愚蠢的事情

w.Header() = resp.Header

或者

rwHeader := w.Header()
rwHeader = resp.Header

显然,这两种方法都没有意义,根本不起作用,但希望能传达我想要做的事情的想法。

谁能解释一下为什么我想做的事情不起作用?或者也许确实如此,但我只是没有找到方法?

最佳答案

您不必自己编写该循环。 Go 1.18 添加了包 golang.org/x/exp/maps ,提供了便捷的Copy function :

func Copy[M ~map[K]V, K comparable, V any](dst, src M)

Copy copies all key/value pairs in src adding them to dst. Whena key in src is already present in dst, the value in dst will beoverwritten by the value associated with the key in src.

import "golang.org/x/exp/maps"
// ...
maps.Copy(w.Header(), resp.Header)

但是请注意,因为响应可以包含 duplicate headersmaps.Copy 的使用并不完全等同于您的循环:

for k := range resp.Header 
w.Header().Add(k, resp.Header.Get(k))
}

maps.Copy相反,您的循环仅检索与resp.Header中存在的每个 header 名称相对应的第一个 header 值。

关于dictionary - 如何扩充 ResponseWriter 的 Header() 返回的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71843507/

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