如果要獲取當前請求信息,需要使用 `c *gin.Context`中的方法,例如:
## 獲取URL路徑參數
```
// 獲取 /user/:id這類型路由綁定的參數
func (c *Context) Param(key string) string
```
## 獲取請求參數
#### 獲取Get請求參數的常用函數
```
func (c *Context) Query(key string) string
```
```
func (c *Context) DefaultQuery(key, defaultValue string) string
```
```
func (c *Context) GetQuery(key string) (string, bool)
```
示例:
```
func Handler(c *gin.Context) {
//獲取name參數, 通過Query獲取的參數值是String類型。
name := c.Query("name")
//獲取name參數, 跟Query函數的區別是,可以通過第二個參數設置默認值。
name := c.DefaultQuery("name", "sockstack")
//獲取id參數, 通過GetQuery獲取的參數值也是String類型,
// 區別是GetQuery返回兩個參數,第一個是參數值,第二個參數是參數是否存在的bool值,可以用來判斷參數是否存在。
id, ok := c.GetQuery("id")
if !ok {
// 參數不存在
}
}
```
`GetQuery`函數,判斷參數是否存在的邏輯是,參數值為空,參數也算存在,只有沒有提交參數,才算參數不存在。
*****
#### 獲取Post請求參數的常用函數
```
func (c *Context) PostForm(key string) string
```
```
func (c *Context) DefaultPostForm(key, defaultValue string) string
```
```
func (c *Context) GetPostForm(key string) (string, bool)
```
示例:
```
func Handler(c *gin.Context) {
//獲取name參數, 通過PostForm獲取的參數值是String類型。
name := c.PostForm("name")
// 跟PostForm的區別是可以通過第二個參數設置參數默認值
name := c.DefaultPostForm("name", "sockstack")
//獲取id參數, 通過GetPostForm獲取的參數值也是String類型,
// 區別是GetPostForm返回兩個參數,第一個是參數值,第二個參數是參數是否存在的bool值,可以用來判斷參數是否存在。
id, ok := c.GetPostForm("id")
if !ok {
// 參數不存在
}
}
```
*****
#### 將請求參數綁定到struct對象
前面獲取參數的方式都是一個個參數的讀取,比較麻煩,`Gin`框架支持將請求參數自動綁定到一個`struct`對象,這種方式支持`Get/Post`請求,也支持`http`請求`body`內容為`json/xml`格式的參數。(**強烈推薦**)
將請求參數綁定到`User struct`對象,如下:
```
// User 結構體定義
type User struct {
Name string `json:"name" form:"name"`
Email string `json:"email" form:"email"`
}
```
通過定義struct字段的標簽,定義請求參數和struct字段的關系。
| 標簽 | 說明 |
| --- | --- |
| `json:"name"` | 數據格式為`json`格式,并且`json`字段名為`name` |
| `form:"name"` | 表單參數名為`name` |
你可以根據自己的需要選擇支持的數據類型,例如需要支持`json`數據格式,可以這樣定義字段標簽: `json:"name"`
如果你通過`http`請求`body`傳遞`json`格式的請求參數,并且通過`post`請求的方式提交參數,則需要將`Content-Type`設置為`application/json`, 如果是`xml`格式的數據,則設置為`application/xml`
```
func (lc *BaseAPIController) Index(c *gin.Context) {
// 請求對象
type Params struct {
Name string `json:"name"`
}
var request Params
if err := c.Bind(&request); err != nil {
c.String(http.StatusBadRequest, err.Error())
}
c.JSON(200, gin.H{
"message": request.Name,
})
}
```
## 獲取請求頭信息
獲取請求頭的常用函數
```
func (c *Context) GetHeader(key string) string
```
示例:
```
func Handler(c *gin.Context) {
//獲取請求頭Host的值
host := c.GetHeader("Host")
//控制臺輸出host的值
fmt.Println(host)
}
```
或者可以這樣用:
```
c.Request.Header.Get("Host")
```
## 獲取客戶端IP
```
c.ClientIP()
```
- 序言
- 基礎
- 安裝GoHub
- 目錄結構
- 開發規范
- 部署項目
- 架構
- 架構總覽
- 生命周期
- 配置
- 配置介紹
- 配置目錄
- 配置格式
- 配置加載
- 讀取配置
- 動態配置
- 環境變量配置
- 路由
- 路由模式
- 路由定義
- 路由參數
- 路由分組
- 路由限流
- 路由拆分
- 控制器
- 控制定義
- 控制器初始化
- 中間件
- Make創建控制器
- 請求
- 請求信息
- 數據庫
- 連接數據庫
- 基本使用
- Make創建模型
- 日志
- 介紹
- 日志驅動
- 日志寫入
- HTTP日志
- 數據庫請求日志
- 錯誤和調試
- Debuger調試器
- 驗證
- 驗證器
- 驗證規則
- Make創建驗證器
- 雜項
- 緩存
- 分頁
- 驗證碼
- CURL請求
- 命令行
- 基礎知識
- console 包
- Cobra 基礎
- 命令行模式
- 附錄
- 配置參考
- 第三方依賴庫