91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言的http庫怎么使用

發布時間:2023-04-28 11:07:44 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

這篇文章主要介紹了Go語言的http庫怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Go語言的http庫怎么使用文章都會有所收獲,下面我們一起來看看吧。

    http庫的使用

    要實現一個httpServer,首先我們需要先了解一下go語言的原生http庫,通常會用到的包括以下幾個內容:

    • Body和GetBody

    • URL

    • Method

    • Header

    • Form

    Body和GetBody

    Body一般用于獲取請求體,但是他有一個問題,因為Body本身是一個流,所以只能讀一次,這也就意味著,如果我們有重復讀取Body的需要,就必須手動進行處理否則程序會出問題

    func readBodyOnce(w http.ResponseWriter, r *http.Request)  {
    	body, err := io.ReadAll(r.Body)
    	if err != nil {
    		fmt.Fprintf(w, "read body failed: %v", err)
    		// 記住要返回,不然就還會執行后面的代碼
    		return
    	}
    	// 類型轉換,將 []byte 轉換為 string
    	fmt.Fprintf(w, "read the data: %s \n", string(body))
    
    	// 嘗試再次讀取,啥也讀不到,但是也不會報錯
    	body, err = io.ReadAll(r.Body)
    	if err != nil {
    		// 不會進來這里
    		fmt.Fprintf(w, "read the data one more time got error: %v", err)
    		return
    	}
    	fmt.Fprintf(w, "read the data one more time: [%s] and read data length %d \n", string(body), len(body))
    }

    GetBody原則上是允許重復讀取的,但是它會返回一個nil,一般用于處理客戶端請求,詳情參考官方文檔 在服務端處理請求的時候,不建議使用

    func getBodyIsNil(w http.ResponseWriter, r *http.Request) {
    	if r.GetBody == nil {
    		fmt.Fprint(w, "GetBody is nil \n")
    	} else {
    		fmt.Fprintf(w, "GetBody not nil \n")
    	}
    }

    URL

    Request.URL.Query

    用于獲取queryParam,所有的值在獲取到的時候都是字符串,因此拿到參數后需要自行處理

    func queryParams(w http.ResponseWriter, r *http.Request) {
    	values := r.URL.Query()
    	fmt.Fprintf(w, "query is %v\n", values)
    }
    Request.URL

    包含request請求中一些有用的信息,但是不一定都有,實際使用時需要做一下校驗

    • Request.URL里的HOST不一定有值

    • Request.Host一般有值

    • RawPath也不一定有值

    • Path肯定有值

    Go語言的http庫怎么使用

    Header

    用于獲取請求頭

    func header(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "header is %v\n", r.Header)
    }

    Method

    用于獲取請求方法

    func method(w http.ResponseWriter, r *http.Request) {  
        fmt.Fprintf(w, "Method is %v\n", r.Method)  
    }

    Form

    用于處理formData,在使用時要先調用ParseForm,請求頭建議加上:Content-Type: application/x-www-form-urlencoded,因為某些原因還無法處理multipart/form-data

    Go語言的http庫怎么使用

    關于“Go語言的http庫怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Go語言的http庫怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    诸暨市| 秀山| 芦山县| 金华市| 密山市| 阳信县| 鄂伦春自治旗| 措美县| 长沙市| 无极县| 贡觉县| 泽州县| 雷州市| 加查县| 扎赉特旗| 揭东县| 贞丰县| 福贡县| 福鼎市| 彭州市| 杭锦旗| 金门县| 定远县| 图们市| 胶州市| 崇仁县| 兴隆县| 正宁县| 石棉县| 张家港市| 泗阳县| 杂多县| 纳雍县| 乌拉特中旗| 松阳县| 泽普县| 五大连池市| 勃利县| 紫阳县| 泗水县| 绵阳市|