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

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

修改網(wǎng)址。響應(yīng)作為函數(shù)參數(shù)傳遞時(shí)的編寫器

修改網(wǎng)址。響應(yīng)作為函數(shù)參數(shù)傳遞時(shí)的編寫器

Go
www說 2022-10-04 19:25:24
我有一個(gè)處理應(yīng)用程序身份驗(yàn)證的身份驗(yàn)證中間件,有幾個(gè)檢查案例,每個(gè)檢查都有相同的邏輯,以防出現(xiàn)錯(cuò)誤:res, err := doSomeCheck()if err != nil {    log.Println("Authentication failed: %v", err)    json.NewEncoder(w).Encode(struct {Error string}{Error: "something is broke!"})    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(http.StatusForbidden)    return}我想用一些這樣的函數(shù)編寫這個(gè)邏輯(每種情況之間的唯一區(qū)別是錯(cuò)誤和客戶端消息):func authError(w http.ResponseWriter, err error, clientMsg string) {    log.Println("Authentication failed: %v", err)    json.NewEncoder(w).Encode(struct {        Error string    }{Error: clientMsg})    w.Header().Set("Content-Type", "application/json")    w.WriteHeader(http.StatusForbidden)    return}但不是指針(我沒有將其作為中間件處理程序的指針獲?。?,因此我無法從函數(shù)中更改它,也不會更改實(shí)際響應(yīng)。我怎樣才能優(yōu)雅地完成這項(xiàng)工作?wauthError()
查看完整描述

1 回答

?
慕斯王

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

w不是指針,但它是接口類型,它將指針包裝在引擎蓋下。因此,您可以按原樣傳遞它,當(dāng)您調(diào)用其方法時(shí),它將反映在調(diào)用方中。

只是不要忘記,如果之前有任何東西寫到響應(yīng),你不能(再次)寫標(biāo)題。同樣,如果您向輸出寫入某些內(nèi)容,則調(diào)用方無法將其取回。如果生成響應(yīng),則在這種情況下,調(diào)用方應(yīng)返回。authError()authError()

另請注意,必須首先設(shè)置標(biāo)頭,然后調(diào)用 ,然后才能寫入響應(yīng)正文。ResponseWriter.WriteHeader()

如果調(diào)用 ,則將寫入響應(yīng)狀態(tài)(如果尚未寫入)(假設(shè) )。ResponseWriter.Write()HTTP 200 OK

引用自回復(fù)作家.write()

// If WriteHeader has not yet been called, Write calls

// WriteHeader(http.StatusOK) before writing the data. If the Header

// does not contain a Content-Type line, Write adds a Content-Type set

// to the result of passing the initial 512 bytes of written data to

// DetectContentType. Additionally, if the total size of all written

// data is under a few KB and there are no Flush calls, the

// Content-Length header is added automatically.

Write([]byte) (int, error)

所以你應(yīng)該是這樣的:authError()


func authError(w http.ResponseWriter, err error, clientMsg string) {

    log.Println("Authentication failed: %v", err)

    w.Header().Set("Content-Type", "application/json")

    w.WriteHeader(http.StatusForbidden)


    err = json.NewEncoder(w).Encode(struct {

        Error string

    }{Error: clientMsg})

    if err != nil {

        log.Println("Failed to write response: %v", err)

    }


    return

}


查看完整回答
反對 回復(fù) 2022-10-04
  • 1 回答
  • 0 關(guān)注
  • 109 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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