日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame請求輸入-基本介紹

請求輸入依靠 ?ghttp.Request? 對象實現(xiàn),?ghttp.Request?繼承了底層的?http.Request?對象。?ghttp.Request?包含一個與當(dāng)前請求對應(yīng)的返回輸出對象?Response?,用于數(shù)據(jù)的返回處理。

相關(guān)方法: https://pkg.GO.dev/github.com/gogf/gf/v2/net/ghttp#Request

簡要說明

可以看到?Request?對象的參數(shù)獲取方法非常豐富,可以分為以下幾類:

  1. ?Get?: 常用方法,簡化參數(shù)獲取,?GetRequest?的別名。
  2. ?GetQuery?: 獲取?GET?方式傳遞過來的參數(shù),包括?Query String?及?Body?參數(shù)解析。
  3. ?GetForm?: 獲取表單方式傳遞過來的參數(shù),表單方式提交的參數(shù)?Content-Type?往往為?application/x-www-form-urlencoded?, ?application/form-data?, ?multipart/form-data?, ?multipart/mixed?等等。
  4. ?GetRequest?: 獲取客戶端提交的參數(shù),不區(qū)分提交方式。
  5. ?Get*Struct?: 將指定提交類型的所有請求參數(shù)綁定到指定的?struct?對象上,注意給定的參數(shù)為對象指針。絕大部分場景中往往使用?Parse?方法將請求數(shù)據(jù)轉(zhuǎn)換為請求對象,具體詳見后續(xù)章節(jié)。
  6. ?GetBody/GetBodyString?: 獲取客戶端提交的原始數(shù)據(jù),該數(shù)據(jù)是客戶端寫入到?body?中的原始數(shù)據(jù),與?HTTP Method?無關(guān),例如客戶端提交?JSON/XML?數(shù)據(jù)格式時可以通過該方法獲取原始的提交數(shù)據(jù)。
  7. ?GetJson?: 自動將原始請求信息解析為?gjson.Json?對象指針返回。
  8. ?Exit*?: 用于請求流程退出控制,詳見本章后續(xù)說明;

提交方式

?GoFrame?框架的參數(shù)獲取不是通過?HTTP Method?來做區(qū)分,而是通過參數(shù)提交類型來區(qū)分。例如,分別通過?HTTP Method: POST、INPUT、DELETE?來提交表單參數(shù),在服務(wù)端獲取參數(shù)不是通過?GetPost/GetInput/GetDelete?的方式來獲取,而是統(tǒng)一通過?GetForm?方法來獲取表單參數(shù),針對其他的?HTTP Method?也是如此。

在?GoFrame?框架下,有以下幾種提交類型:

  1. ?Router?: 路由參數(shù),來源于路由規(guī)則匹配。
  2. ?Query?: ?URL?中的?Query String?參數(shù)解析,如:http://127.0.0.1/index?id=1&name=john 中的??id=1?&name=john?。
  3. ?Form?: 表單提交參數(shù),最常見的提交方式,提交的?Content-Type?往往為:?application/x-www-form-urlencoded?、?multipart/form-data?、?multipart/mixed?。
  4. ?Body?: 原始提交內(nèi)容,從?Body?中獲取并解析得到的參數(shù),?JSON/XML?請求往往使用這種方式提交。
  5. ?Custom?: 自定義參數(shù),往往在服務(wù)端的中間件、服務(wù)函數(shù)中通過?SetParam/GetParam?方法管理。

參數(shù)類型

獲取的參數(shù)方法可以對指定鍵名的數(shù)據(jù)進(jìn)行自動類型轉(zhuǎn)換,例如:http://127.0.0.1:8199/?amount=19.66,通過?Get(xxx).String()?將會返回?19.66?的字符串類型,?Get(xxx).Float32()/Get(xxx).Float64()?將會分別返回?float32?和?float64?類型的數(shù)值?19.66?。但是,?Get(xxx).Int()/Get(xxx).Uint()?將會返回?19?(如果參數(shù)為?float?類型的字符串,將會按照向下取整進(jìn)行整型轉(zhuǎn)換)。

聰明的您一定發(fā)現(xiàn)了,獲取到的參數(shù)都是泛型變量,根據(jù)該泛型變量再根據(jù)需要調(diào)用對應(yīng)的方法轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)類型。

使用示例:

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("/", func(r *ghttp.Request) {
		r.Response.Writeln(r.Get("amount").String())
		r.Response.Writeln(r.Get("amount").Int())
		r.Response.Writeln(r.Get("amount").Float32())
	})
	s.SetPort(8199)
	s.Run()
}

執(zhí)行后我們訪問地址 http://127.0.0.1:8199/?amount=19.66 頁面輸出

19.66
19
19.66

參數(shù)優(yōu)先級

我們考慮一種場景,當(dāng)不同的提交方式中存在同名的參數(shù)名稱會怎么樣?在?GoFrame?框架下,我們根據(jù)不同的獲取方法,將會按照不同的優(yōu)先級進(jìn)行獲取,優(yōu)先級高的方式提交的參數(shù)將會優(yōu)先覆蓋其他方式的同名參數(shù)。優(yōu)先級規(guī)則如下:

  1. ?Get?及?GetRequset?方法:?Router < Query < Body < Form < Custom?,也就是說自定義參數(shù)的優(yōu)先級最高,其次是?Form?表單參數(shù),再次是?Body?提交參數(shù),以此類推。例如,?Query?和?Form?中都提交了同樣名稱的參數(shù)id,參數(shù)值分別為1和2,那么?Get("id")/GetForm("id")?將會返回2,而?GetQuery("id")?將會返回1。
  2. ?GetQuery?方法:?Query > Body?,也就是說?query string?的參數(shù)將會覆蓋?Body?中提交的同名參數(shù)。例如,?Query?和?Body?中都提交了同樣名稱的參數(shù)?id?,參數(shù)值分別為1和2,那么?Get("id")?將會返回2,而?GetQuery("id")?將會返回1。
  3. ?GetForm?方法:由于該類型的方法僅用于獲取?Form?表單參數(shù),因此沒什么優(yōu)先級的差別。

使用示例:

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

func main() {
	s := g.Server()
	s.BindHandler("/input", func(r *ghttp.Request) {
		r.Response.Writeln(r.Get("amount"))
	})
	s.BindHandler("/query", func(r *ghttp.Request) {
		r.Response.Writeln(r.GetQuery("amount"))
	})
	s.SetPort(8199)
	s.Run()
}

執(zhí)行后,我們通過?curl?工具進(jìn)行測試:

$ curl -d "amount=1" -X POST "http://127.0.0.1:8199/input?amount=100"
1
$ curl -d "amount=1" -X POST "http://127.0.0.1:8199/query?amount=100"
100

可以看到,當(dāng)我們訪問?/input?路由時,該路由方法中采用了?Get?方法獲取?amount?參數(shù),按照同名優(yōu)先級的規(guī)則返回了1,即?body?中傳遞的參數(shù)。而當(dāng)我們通過?/query?路由訪問時,該路由方法內(nèi)部使用了?GetQuery?方法獲取?amount?參數(shù),因此獲取到的是?query string?參數(shù)中的?amount?值,返回了100。


網(wǎng)站名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame請求輸入-基本介紹
鏈接分享:http://www.dlmjj.cn/article/dhpeijo.html