第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何擴充 ResponseWriter 的 Header() 返回的地圖

如何擴充 ResponseWriter 的 Header() 返回的地圖

Go
慕神8447489 2022-11-28 17:08:44
所以我確定我想在這里作弊,但 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)頭值。


查看完整回答
反對 回復(fù) 2022-11-28
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊

你不能。

w是一個http.ResponseWriter,它是一種接口類型——所以只有方法,沒有直接可訪問的字段。如您所知,它有一種獲取底層Header地圖的方法。

但是,它沒有用于替換地圖的“Setter”方法。因此,復(fù)制標(biāo)頭值的唯一方法是像您引用的循環(huán)那樣手動復(fù)制。


查看完整回答
反對 回復(fù) 2022-11-28
  • 2 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號