最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Golang中ResponseWriter的一個坑

 更新時間:2021年04月27日 14:42:56   作者:天地一小儒  
這篇文章主要介紹了解決Golang中ResponseWriter的一個坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在使用Context.ResponseWriter中的Set/WriteHeader/Write這三個方法時,使用順序必須如下所示,否則會出現(xiàn)某一設(shè)置不生效的情況。

ctx.ResponseWriter.Header().Set("Content-type", "application/text")
 ctx.ResponseWriter.WriteHeader(403)
 ctx.ResponseWriter.Write([]byte(resp))

如1:

ctx.ResponseWriter.Header().Set("Content-type", "application/text")
 ctx.ResponseWriter.Write([]byte(resp))
 ctx.ResponseWriter.WriteHeader(403)

會導(dǎo)致返回碼一直是200

補(bǔ)充:Go里w http.ResponseWriter,調(diào)用w.Write()方法報錯

Go里w http.ResponseWriter寫入報錯

http: request method or response status code does not allow

1. 下面是報錯截圖

2. 點進(jìn)去Write方法

它首先是一個接口;

由于它是在HTTP web服務(wù)器的應(yīng)用場景,所以它具體的實現(xiàn)方法在net/http/server.go里:

func (w *response) Write(data []byte) (n int, err error) {
 return w.write(len(data), data, "")
}

再點進(jìn)去,函數(shù)里你會發(fā)現(xiàn)有一個關(guān)鍵的判斷

// 其中ErrBodyNotAllowed的
// 代碼內(nèi)容
// ErrBodyNotAllowed = errors.New("http: request method or response status code does not allow body")
if !w.bodyAllowed() {
 return 0, ErrBodyNotAllowed
}
 

點進(jìn)去,發(fā)現(xiàn)它在沒有設(shè)置Header時會panic,當(dāng)然這跟我們當(dāng)前要討論的問題關(guān)系不大,關(guān)鍵在bodyAllowedForStatus()方法

func (w *response) bodyAllowed() bool {
 if !w.wroteHeader {
  panic("")
 }
 return bodyAllowedForStatus(w.status)
}

再點,終于看到了,當(dāng)設(shè)置狀態(tài)碼為【100,199】、204、304就會報這個錯,而我剛好設(shè)置的狀態(tài)碼就是204,我把它改成200重新試下,問題解決。

func bodyAllowedForStatus(status int) bool {
 switch {
 case status >= 100 && status <= 199:
  return false
 case status == 204:
  return false
 case status == 304:
  return false
 }
 return true
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go秒爬博客園100頁新聞

    Go秒爬博客園100頁新聞

    利用go語言的協(xié)程并發(fā)優(yōu)勢爬取網(wǎng)頁速度相當(dāng)之快,博客園100頁新聞標(biāo)題只需一秒即可全部爬取,跟著小編一起去看看如何實現(xiàn)的,希望大家可以從中受益
    2018-09-09
  • 深入了解Go語言中sync.Pool的使用

    深入了解Go語言中sync.Pool的使用

    本文將介紹?Go?語言中的?sync.Pool并發(fā)原語,包括sync.Pool的基本使用方法、使用注意事項等的內(nèi)容,對我們了解Go語言有一定的幫助,需要的可以參考一下
    2023-04-04
  • GoLang逃逸分析講解

    GoLang逃逸分析講解

    我們都知道go語言中內(nèi)存管理工作都是由Go在底層完成的,這樣我們可以不用過多的關(guān)注底層的內(nèi)存問題。本文主要總結(jié)一下?Golang內(nèi)存逃逸分析,需要的朋友可以參考以下內(nèi)容,希望對大家有幫助
    2022-12-12
  • Golang 1.16 中 Modules的主要變化更新

    Golang 1.16 中 Modules的主要變化更新

    這篇文章主要介紹了Golang 1.16 中 Modules的主要變化更新,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Go中strings的常用方法詳解

    Go中strings的常用方法詳解

    這篇文章主要介紹了Go中strings的常用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 談?wù)揋o 什么時候會觸發(fā) GC問題

    談?wù)揋o 什么時候會觸發(fā) GC問題

    Go 語言作為一門新語言,在早期經(jīng)常遭到唾棄的就是在垃圾回收(下稱:GC)機(jī)制中 STW(Stop-The-World)的時間過長。下面文章就對此話題展開,感興趣的小伙伴可以參考下面文章的內(nèi)容
    2021-09-09
  • Go Gin中間件的具體使用

    Go Gin中間件的具體使用

    中間件是Gin框架中的一個重要概念,它可以用來處理HTTP請求和響應(yīng),或者在處理請求之前和之后執(zhí)行一些操作,本文主要介紹了Go Gin中間件的具體使用,感興趣的可以了解一下
    2023-11-11
  • Golang中的自定義函數(shù)類型詳解

    Golang中的自定義函數(shù)類型詳解

    在 Golang 中,type 關(guān)鍵字用于定義自定義類型,函數(shù)也是一種數(shù)據(jù)類型,因此可以使用 type 關(guān)鍵字來定義函數(shù)類型,本文就給大家詳細(xì)介紹一下Golang中的自定義函數(shù)類型,需要的朋友可以參考下
    2023-07-07
  • go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    這篇文章主要介紹了go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法,實例分析了Go語言反射的使用技巧,需要的朋友可以參考下
    2015-03-03
  • golang中json小談之字符串轉(zhuǎn)浮點數(shù)的操作

    golang中json小談之字符串轉(zhuǎn)浮點數(shù)的操作

    這篇文章主要介紹了golang中json小談之字符串轉(zhuǎn)浮點數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

射洪县| 额尔古纳市| 通江县| 云浮市| 新宁县| 宽城| 枝江市| 布尔津县| 建宁县| 天峻县| 普兰店市| 稻城县| 明水县| 六枝特区| 平乡县| 鹤山市| 英山县| 喀什市| 舒兰市| 石河子市| 昌乐县| 吕梁市| 南和县| 深水埗区| 勃利县| 中宁县| 凤山县| 浏阳市| 霍邱县| 哈密市| 章丘市| 偏关县| 新乡县| 威宁| 台州市| 宣威市| 鹤岗市| 祁东县| 应用必备| 贡嘎县| 五指山市|