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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在Go HTTP處理程序中,為什么ResponseWriter是一個(gè)值,而Request是一個(gè)指針?

在Go HTTP處理程序中,為什么ResponseWriter是一個(gè)值,而Request是一個(gè)指針?

Go
藍(lán)山帝景 2021-05-21 13:08:38
我正在通過(guò)為GAE編寫(xiě)應(yīng)用來(lái)學(xué)習(xí)Go,這是處理程序函數(shù)的簽名:func handle(w http.ResponseWriter, r *http.Request) {}我在這里是指針新手,那么為什么該Request對(duì)象是指針,但ResponseWriter不是呢?是否有必要采用這種方式,或者僅僅是為了使某種基于高級(jí)指針的代碼成為可能?
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

您得到的w是指向非導(dǎo)出類(lèi)型的指針,http.response但與ResponseWriter接口一樣,這是不可見(jiàn)的。

server.go

type ResponseWriter interface {
    ...}

另一方面,r它是指向具體結(jié)構(gòu)的指針,因此需要顯式傳遞引用。

request.go

type Request struct {
    ...}


查看完整回答
反對(duì) 回復(fù) 2021-05-24
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

http.ResponseWriter是一個(gè)接口,并實(shí)現(xiàn)此接口的現(xiàn)有類(lèi)型的指針。這意味著不需要使用指向該接口的指針,因?yàn)樗呀?jīng)由指針“支持”。這個(gè)概念是由go develpers的一個(gè)描述了一下這里雖然類(lèi)型實(shí)現(xiàn)http.ResponseWriter并不需要是一個(gè)指針,它不實(shí)用,至少去http服務(wù)器之內(nèi)。

http.Request不是一個(gè)接口,它只是一個(gè)結(jié)構(gòu),并且由于我們要更改此結(jié)構(gòu)并使Web服務(wù)器看到這些更改,因此它必須是一個(gè)指針。如果只是一個(gè)struct值,我們將修改它的副本,而調(diào)用我們的代碼的Web服務(wù)器看不到它。


查看完整回答
反對(duì) 回復(fù) 2021-05-24
?
qq_花開(kāi)花謝_0

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

正如此處和其他地方的許多其他答案中正確提到的那樣,它ResponseWriter是一個(gè)界面,其含義已在SO答案和博客中進(jìn)行了詳細(xì)描述。

我要解決的是我的感覺(jué),這是一個(gè)巨大且危險(xiǎn)的誤解,原因是請(qǐng)求是通過(guò)“引用”傳遞的(盡管這樣的事情在Go中實(shí)際上并不存在)是“我們想要進(jìn)行更改使其對(duì)服務(wù)器可見(jiàn)”。

引用幾個(gè)答案:

[..]它只是一個(gè)結(jié)構(gòu),因?yàn)槲覀兿敫淖冞@個(gè)結(jié)構(gòu),并在Web服務(wù)器看到這些變化,它必須是一個(gè)指針[..] SO

[..]處理程序?qū)equest的更改需要對(duì)服務(wù)器可見(jiàn),因此我們僅通過(guò)引用而不是通過(guò)值來(lái)傳遞[..] SO

這是錯(cuò)誤的; 實(shí)際上,文檔明確警告不要篡改/更改請(qǐng)求

除讀取正文外,處理程序不應(yīng)修改提供的請(qǐng)求。

相反,不是嗎?:-)

如果要更改請(qǐng)求,例如在將跟蹤標(biāo)頭傳遞給中間件鏈中的下一個(gè)處理程序之前附加跟蹤標(biāo)頭,則必須復(fù)制請(qǐng)求并將復(fù)制的版本向下傳遞給鏈。

Go團(tuán)隊(duì)提出了更改行為以允許修改傳入請(qǐng)求的請(qǐng)求,但更改此類(lèi)內(nèi)容可能會(huì)導(dǎo)致至少某些現(xiàn)有代碼意外中斷。

如果我們明確告訴人們不要更改請(qǐng)求,為什么還要使用指針?性能,Request是一個(gè)大的結(jié)構(gòu),并復(fù)制它可以帶來(lái)性能的下降,尤其是在考慮長(zhǎng)期中間件鏈。團(tuán)隊(duì)必須權(quán)衡利弊,這絕對(duì)不是理想的解決方案,但是這里的權(quán)衡顯然是性能方面的問(wèn)題(而不是API安全性)。


查看完整回答
反對(duì) 回復(fù) 2021-05-24
  • 3 回答
  • 0 關(guān)注
  • 589 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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