亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Gin golang web開發模型綁定實現過程解析

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

熱門標簽:赤峰電銷 江蘇呼叫中心外呼系統有效果嗎 利用地圖標注位置 官渡電銷外呼管理系統怎么收費 谷歌美發店地圖標注 杭州人工智能電銷機器人費用 貴州電話智能外呼系統 400開頭電話怎樣申請 地圖區域圖標注后導出

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

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

綁定表單或者查詢字符串

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參數

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方法。

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[]",結構體例子如下:

type myForm struct {
  Colors []string `form:"colors[]"`
}

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

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"}。代碼如下:

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,不知道未來會不會提供這種功能。

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

您可能感興趣的文章:
  • nodejs個人博客開發第四步 數據模型
  • 詳解iOS應用UI開發中的九宮格坐標計算與字典轉換模型
  • iOS中的應用啟動原理以及嵌套模型開發示例詳解
  • PHP YII框架開發小技巧之模型(models)中rules自定義驗證規則
  • 軟件開發七大過程模型

標簽:武漢 宜春 泰安 鷹潭 黔西 保定 松原 河池

巨人網絡通訊聲明:本文標題《Gin golang web開發模型綁定實現過程解析》,本文關鍵詞  Gin,golang,web,開發,模型,綁定,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Gin golang web開發模型綁定實現過程解析》相關的同類信息!
  • 本頁收集關于Gin golang web開發模型綁定實現過程解析的相關信息資訊供網民參考!
  • 推薦文章
    青青青草影院 | 亚欧成人乱码一区二区| 黄视频网站在线看| 一级毛片视频在线观看| 精品美女| 欧美电影免费| 精品国产一区二区三区久久久狼 | 亚洲 男人 天堂| 精品视频在线看 | 九九精品在线播放| 亚洲女人国产香蕉久久精品| 日韩av东京社区男人的天堂| 精品视频在线看 | 欧美另类videosbestsex高清| 精品毛片视频| 中文字幕一区二区三区 精品| 91麻豆精品国产片在线观看| 亚欧成人乱码一区二区| 日本免费看视频| 韩国毛片免费大片| 日本免费看视频| a级毛片免费观看网站| 日本伦理片网站| 夜夜操网| 精品久久久久久免费影院| 久草免费在线视频| 国产一区精品| 欧美激情一区二区三区视频 | 日本免费看视频| 亚洲精品中文字幕久久久久久| 人人干人人插| 国产成人女人在线视频观看| 91麻豆精品国产综合久久久| 国产麻豆精品| 一级毛片视频播放| 欧美国产日韩精品| 日日夜夜婷婷| 国产韩国精品一区二区三区| 欧美国产日韩精品| 麻豆午夜视频| 欧美a级v片不卡在线观看| 可以免费在线看黄的网站| 免费国产在线观看| 国产一区二区精品久久91| 色综合久久久久综合体桃花网| 亚洲 欧美 91| 尤物视频网站在线| 黄视频网站在线观看| 91麻豆国产福利精品| 美女被草网站| 国产91素人搭讪系列天堂| 国产精品123| 一级女人毛片人一女人| 一级女性全黄生活片免费| 国产成人精品影视| 亚洲wwwwww| 成人免费网站视频ww| 国产伦精品一区三区视频 | 精品国产一区二区三区久久久狼 | 韩国三级香港三级日本三级| 国产一区二区精品尤物| 美女被草网站| 日本伦理片网站| 久久国产影视免费精品| 欧美国产日韩精品| 亚洲第一色在线| 精品久久久久久免费影院| 日日日夜夜操| 日韩中文字幕一区| 九九热国产视频| 久久国产精品自由自在| 韩国毛片免费| 97视频免费在线观看| 欧美激情一区二区三区在线| 亚洲女初尝黑人巨高清在线观看| 成人a大片高清在线观看| 精品国产一区二区三区久久久蜜臀 | 国产美女在线观看| 国产成a人片在线观看视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品国产亚洲一区二区三区| 四虎影视精品永久免费网站| 国产美女在线观看| 日韩在线观看免费完整版视频| 久久精品店| 国产精品自拍在线观看| 精品在线免费播放| 免费国产在线视频| 麻豆网站在线免费观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 可以免费看毛片的网站| 久久精品免视看国产明星| 台湾美女古装一级毛片| 精品视频在线观看视频免费视频| 国产国产人免费视频成69堂| 精品视频一区二区三区| 91麻豆精品国产综合久久久| 在线观看导航| 韩国毛片 免费| 夜夜操网| 日韩中文字幕一区二区不卡| 麻豆午夜视频| 久久久成人网| 日韩欧美一二三区| 四虎影视库| 日本在线不卡视频| 午夜精品国产自在现线拍| 欧美激情伊人| 国产一级生活片| 一级毛片视频在线观看| 精品在线免费播放| 一级片免费在线观看视频| 精品视频在线看| 精品久久久久久中文字幕2017| 色综合久久天天综合观看| 四虎影视久久| 日韩在线观看免费完整版视频| 成人a大片在线观看| 久久精品免视看国产成人2021| 台湾毛片| 成人在激情在线视频| 一级女性全黄久久生活片| 国产伦精品一区二区三区无广告| 九九久久99综合一区二区| 999久久狠狠免费精品| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 天天做日日干| 精品视频在线看| 国产视频一区二区在线观看| 天天色色色| 久久99青青久久99久久| 国产视频一区二区三区四区| 日韩女人做爰大片| 成人高清视频在线观看| 一级女人毛片人一女人| 青青青草影院| 韩国毛片免费| 青青久久精品国产免费看| 久久成人亚洲| 91麻豆tv| 亚洲女初尝黑人巨高清在线观看| 成人在免费观看视频国产| 99热精品在线| 日本免费看视频| 成人在免费观看视频国产| 四虎论坛| 黄色短视屏| 青青久久精品| 免费的黄视频| 四虎论坛| 欧美激情伊人| 精品视频在线观看一区二区 | 久久99这里只有精品国产| 九九久久99| 中文字幕一区二区三区精彩视频 | 日韩免费在线视频| 可以免费看毛片的网站| 午夜激情视频在线播放| 欧美激情影院| 色综合久久天天综合观看| 九九干| 黄视频网站在线免费观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 美女被草网站| a级黄色毛片免费播放视频| 日韩欧美一及在线播放| 精品视频在线观看一区二区 | 你懂的日韩| 国产一区二区福利久久| 美女免费精品视频在线观看| 欧美激情一区二区三区在线| 美女被草网站| 午夜激情视频在线播放| 韩国三级视频网站| 国产精品自拍亚洲| 精品国产一区二区三区精东影业| 韩国毛片 免费| 国产成人啪精品视频免费软件| 精品久久久久久中文| 成人免费福利片在线观看| 国产高清在线精品一区a| 日韩专区在线播放| 精品视频在线观看免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产视频一区在线| 可以免费看毛片的网站| 一a一级片| 精品国产亚一区二区三区| 日本免费看视频| 日韩免费在线观看视频| 欧美18性精品| 午夜在线影院| 美女免费精品视频在线观看| 欧美爱爱动态| 91麻豆国产福利精品| 亚洲精品影院| 精品国产亚洲一区二区三区| 成人影院一区二区三区| 色综合久久久久综合体桃花网| 精品国产亚洲一区二区三区|