国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Gin golang web開發模型綁定實現過程解析

Gin golang web開發模型綁定實現過程解析

2021-01-31 00:47陳宏博 Golang

這篇文章主要介紹了Gin golang web開發模型綁定實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

我們了解到gin可用通過類似DefaultQuery或DefaultPostForm等方法獲取到前端提交過來的參數。參數不多的情況下也很好用,但是想想看,如果接口有很多個參數的時候再用這種方法就要調用很多次獲取參數的方法,本文將介紹一種新的接收參數的方法來解決這個問題:模型綁定

gin中的模型綁定可以理解為:把請求的參數映射為一個具體的類型。gin支持JSON,XML,YAML和表單參數等多種參數格式,只需要在對應的字段上聲明標簽。

綁定表單或者查詢字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
type Person struct {
    Name  string `form:"name"`
    Address string `form:"address"`
}
 
func startPage(c *gin.Context) {
    var person Person
    if c.ShouldBindQuery(&person) == nil {
        log.Println(person.Name)
        log.Println(person.Address)
    }
    c.String(200, "Success")
}

在結構體Name字段聲明form標簽,并調用ShouldBindQuery方法,gin會為我們綁定查詢字符串中的name和address兩個參數。注意雖然我們聲明了form標簽,ShouldBindQuery只綁定查詢字符串中的參數。

如果你想綁定表單中的參數的話結構體不用改變,需要把ShouldBindQuery方更改為ShouldBind方法。ShouldBind方法會區分GET和POST請求,如果是GET請求綁定查詢字符串中的參數,如果是POST請求綁定表單參數中的內容,但是不能同時綁定兩種參數。

綁定json參數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
type Person struct {
    Name  string `json:"name"`
    Address string `json:"address"`
}
 
func startPage(c *gin.Context) {
    var person Person
    if c.ShouldBind(&person) == nil {
        log.Println(person.Name)
        log.Println(person.Address)
    }
    c.String(200, "Success")
}

json是一種常用的數據交換格式,尤其是在和web前端頁面交互的時候,似乎已經成為了一種事實標準。gin綁定json格式數據方法很簡單,只需要設置字段的標簽為json并且調用ShouldBind方法。

其他類型參數綁定

路由參數在綁定時設置標簽為uri,并調用ShouldBindUri方法。

?
1
2
3
4
5
6
7
8
9
10
11
type Person struct {
    Id  string `uri:"id"`
}
 
func startPage(c *gin.Context) {
    var person Person
    if c.ShouldBindUri(&person) == nil {
        log.Println(person.Id)
    }
    c.String(200, "Success")
}

綁定在HTTP Header中的參數,字段的標簽設置為header,調用方法為ShouldBindHeader。

還有不太常用的數組參數是字段標簽設置為form:"colors[]",結構體例子如下:

?
1
2
3
type myForm struct {
  Colors []string `form:"colors[]"`
}

文件上傳這種場景我很少用模型綁定的方式獲取參數,在gin中對于這種場景也提供了模型綁定支持。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
type ProfileForm struct {
    Name  string        `form:"name"`
    Avatar *multipart.FileHeader `form:"avatar"`
    // Avatars []*multipart.FileHeader `form:"avatar"` 多文件上傳
}
 
func main() {
    router := gin.Default()
    router.POST("/profile", func(c *gin.Context) {
        var form ProfileForm
        if err := c.ShouldBind(&form); err != nil {
            c.String(http.StatusBadRequest, "bad request")
            return
        }
 
        err := c.SaveUploadedFile(form.Avatar, form.Avatar.Filename)
        if err != nil {
            c.String(http.StatusInternalServerError, "unknown error")
            return
        }
 
        c.String(http.StatusOK, "ok")
    })
    router.Run(":8080")
}

多種類型的模型綁定

如果我們有一個UpdateUser接口,PUT /user/:id,參數是{"nickname": "nickname...","mobile": "13322323232"}。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
type ProfileForm struct {
    Id    int  `uri:"id"`
    Nickname string `json:"nickname"` // 昵稱
    Mobile  string `json:"mobile"// 手機號
}
 
func main() {
    router := gin.Default()
    router.GET("/user/:id", func(c *gin.Context) {
        var form ProfileForm
        if err := c.ShouldBindUri(&form); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
 
        if err := c.ShouldBindJSON(&form); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
 
        c.String(http.StatusOK, "ok")
    })
    router.Run(":8080")
}

代碼里調用了兩次bind方法才獲取到全部的參數。和gin社區溝通之后發現目前還不能調用一個方法同時綁定多個參數來源,當前gin版本為1.6.x,不知道未來會不會提供這種功能。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/huaface/p/13890194.html

延伸 · 閱讀

精彩推薦
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成av在线 | 91精品国产综合久久福利软件 | 亚洲黄色免费 | 亚洲成人一区二区三区四区 | 亚洲日本乱码在线观看 | 久久精品视频免费观看 | 精品国产成人 | 久久久国产精品一区 | 日韩在线看片 | 国产精品一区二区不卡 | 色偷偷888欧美精品久久久 | 日韩资源 | 精品中文一区 | 最新一级毛片 | 毛片特级 | 亚洲国产精品久久人人爱 | 亚洲日韩中文字幕一区 | 午夜影院免费 | 日韩精品在线视频 | 欧美黄色成人 | 天天天干天天天操 | 国产精品不卡一区二区三区 | 狠狠插狠狠操 | 午夜影院 | 国产在线三区 | 日韩毛片 | 中文字幕 视频一区 | 亚洲国产精品一区二区久久 | a级免费电影 | 黄版视频在线观看 | 成年人视频在线观看免费 | 日本三级不卡 | 久久久久久久久久国产 | 精品国产精品三级精品av网址 | 不用播放器的免费av | 午夜特片网 | 牛牛澡牛牛爽一区二区 | 欧美一级在线 | 亚洲一区二区在线 | 中文字幕大全 | 亚州av影院 |