所以我確定我想在這里作弊,但 ResponseWriter 文檔有一個方法“Header()”,它返回它正在使用的 Header 對象。 https://pkg.go.dev/net/http#ResponseWriter.Header現(xiàn)在我從其他地方獲得了一個 http.Response,我想將所有標(biāo)頭從那里復(fù)制到我的 ResponseWriter 中?,F(xiàn)在,我可以像這樣使用 for 循環(huán):for k := range resp.Header w.Header().Add(k, resp.Header.Get(k))}從邏輯上講,將 ResponseWriter 的標(biāo)頭中的引用更改為 Response 的標(biāo)頭對我來說也是有意義的,但是似乎 ResponseWriter 類型正在積極地試圖阻止我這樣做。像這樣愚蠢的事情浮現(xiàn)在腦海w.Header() = resp.Header或者rwHeader := w.Header()rwHeader = resp.Header顯然,這兩個都沒有意義,根本不起作用,但希望能傳達(dá)我正在嘗試做的事情的想法。任何人都可以解釋為什么我正在嘗試做的事情不起作用嗎?或者也許確實如此,但我只是沒有看到這樣做的方法?
2 回答

吃雞游戲
TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊
您不必自己編寫該循環(huán)。Go 1.18 看到了 package 的添加golang.org/x/exp/maps
,它提供了一個方便的Copy
功能:
func Copy[M ~map[K]V, K comparable, V any](dst, src M)
Copy
復(fù)制所有鍵/值對,src
將它們添加到dst
. 當(dāng)輸入中的鍵src
已經(jīng)存在于中時dst
,輸入中的值dst
將被與輸入中的鍵關(guān)聯(lián)的值覆蓋src
。
import "golang.org/x/exp/maps" // ... maps.Copy(w.Header(), resp.Header)
但是,請注意,由于響應(yīng)可以包含重復(fù)的標(biāo)頭,因此使用maps.Copy
并不完全等同于您的循環(huán):
for k := range resp.Header w.Header().Add(k, resp.Header.Get(k)) }
與 相反maps.Copy
,您的循環(huán)僅檢索與 中存在的每個標(biāo)頭名稱相對應(yīng)的第一個resp.Header
標(biāo)頭值。

幕布斯6054654
TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊
你不能。
w
是一個http.ResponseWriter,它是一種接口類型——所以只有方法,沒有直接可訪問的字段。如您所知,它有一種獲取底層Header
地圖的方法。
但是,它沒有用于替換地圖的“Setter”方法。因此,復(fù)制標(biāo)頭值的唯一方法是像您引用的循環(huán)那樣手動復(fù)制。
- 2 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消