(Go Gin)Gin學習筆記(三)數據解析和綁定:結構體分析,包括JSON解析、form解析、URL解析,區分綁定的Bind方法

1. 數據解析和綁定

bind或bindXXX函數(后文中我們統一都叫bind函數)的作用就是將請求體中的參數值綁定到對應的結構體上,以方便后續業務邏輯的處理

1.1 JSON數據解析和綁定

  • 客戶端傳參,后端接收并解析到結構體
package mainimport ("github.com/gin-gonic/gin""log""net/http"
)///type Login struct {Username string `form:"username" json:"username" binding:"required" msg:"用戶名不能為空"`Password string `form:"password" json:"password" binding:"required"`
}///func demo(res *gin.Context) {var json Login// ShouldBind() msg:"用戶名不能為空"將request的body中的數據,自動按照json格式解析到結構體if err := res.ShouldBind(&json); err != nil {res.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}log.Println("user:", json.Username, "\n", "password:", json.Password)res.JSON(http.StatusOK, gin.H{})
}func main() {r := gin.Default()r.POST("/demo", demo)r.Run(":8080")
}

1.1.1 結構體分析

Password 使用了 binding:"required"

標簽中,binding標簽為其屬性設置了必填項

  • 如果字符串為空:“”,ShouldBind,一樣會報400錯
  • 如果使用 binding:"-", 就不會進行必填項檢驗了

1.2 form數據解析和綁定

package mainimport ("github.com/gin-gonic/gin""net/http"
)///type Login struct {Username string `form:"username" json:"測試" binding:"required" msg:"用戶名不能為空"`Password string `form:"password" binding:"required"`
}///func demo(res *gin.Context) {var json Login// Bind() 默認解析并綁定form格式// 根據請求頭中content-type自動推斷if err := res.Bind(&json); err != nil {res.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}//log.Println("user:", json.Username, "\n", "password:", json.Password)res.JSON(http.StatusOK, gin.H{"user": json.Username,"pass": json.Password,})
}func main() {r := gin.Default()r.POST("/demo", demo)r.Run(":8080")
}

1.3 URI數據解析和綁定

package mainimport ("github.com/gin-gonic/gin""net/http"
)///type Login struct {Username string `form:"username" json:"測試" binding:"required" msg:"用戶名不能為空"`Password string `form:"password" binding:"required"`
}///func demo(res *gin.Context) {var json Login// Bind() 默認解析并綁定form格式// 根據請求頭中content-type自動推斷if err := res.ShouldBindUri(&json); err != nil {res.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}//log.Println("user:", json.Username, "\n", "password:", json.Password)res.JSON(http.StatusOK, gin.H{"user": json.Username,"pass": json.Password,})
}func main() {r := gin.Default()r.POST("/demo", demo)r.Run(":8080")
}

1.4 綁定的方法區別

gin 為數據解析進行了多方面的設置,

面對不同的前端數據有統一的代碼處理方法。其本質上,還是將表單數據中每個數據的key值與結構中的數據一一對應。

  • ShouldBindJSON()
  • ShouldBindXML()
  • ShouldBind()

翻閱context的源碼,就能看到Bind和ShouldBind這兩類方法

ShouldBind()Bind()
只會返回錯誤信息,不會往header里面寫400的錯誤狀態碼返回錯誤,并在header里面寫400的狀態碼

這是兩者最大的差異,是否會在header中添加400的錯誤狀態碼

2. ??GoGin框架——前文鏈接

Gin框架學習參考網站:gin框架·Go語言中文文檔

  • (Go Gin)基于Go的WEB開發框架,GO Gin是什么?怎么啟動?本文給你答案
  • (Go Gin)Gin學習筆記(二):路由配置、基本路由、表單參數、上傳單個文件、上傳多個文件、淺扒路由原理

3. 💕👉博客專欄

  • Golang專欄-包含基礎、Gin、Goam等知識
  • 云原生專欄-包含k8s、docker等知識
  • 從0開始學習云計算-華為HCIP證書
  • JUC專欄-帶你快速領悟JUC的知識!
  • JVM專欄-深入Java虛擬機,理解JVM的原理
  • 基于Java研究 數據結構與算法-包含貪心算法、加權圖、最短路徑算法等知識
  • Docker專欄-上手熱門容器技術Docker
  • SpringBoot專欄-學習SpringBoot快速開發后端
  • 項目管理工具的學習-設計技術:Maven、Git、Gradle等相關管理工具
  • JavaSE-全面了解Java基礎
  • JS專欄-使用JS作的一部分實例~
  • 使用CSS所作的一部分案例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79578.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes(k8s)學習筆記(四)--入門基本操作

本文通過kubernetes部署tomcat集群,來學習和掌握kubernetes的一些入門基本操作 前提條件 1.各個節點處于Ready狀態; 2.配置好docker鏡像庫(否則會出現ImagePullBackOff等一些問題); 3.網絡配置正常(否則即使應用發布沒問題,瀏…

【大模型面試每日一題】Day 7:為什么大模型訓練選擇 Adam 而非 SGD?Adam 的關鍵改進是什么?

【大模型面試每日一題】Day 7:為什么大模型訓練選擇 Adam 而非 SGD?Adam 的關鍵改進是什么? 📌 題目重現 🌟🌟 面試官:為什么大模型訓練選擇 Adam 而非 SGD?Adam 的關鍵改進是什么…

輕量級在線Excel預覽工具

輕量級在線Excel預覽工具 簡介 在日常工作中,我們經常需要快速查看Excel文件的內容,但不一定總是需要打開完整的Excel軟件。為了解決這個問題,我開發了一個輕量級的在線Excel預覽工具,讓您可以通過瀏覽器快速查看Excel文件內容。…

[Vue]props解耦傳參

在 Vue 中,通過 props 傳遞路由參數(即 props 解耦)是一種將組件與路由參數解耦的推薦方式。這種方法能顯著提升組件的獨立性、復用性和可維護性。以下是詳細解釋: 一、什么是 props 解耦? props 解耦是指&#xff1a…

Trae 使用心得:從新手到上手

Trae 使用心得:從新手到上手 最近,我開始試用 Trae,一款新興的 AI 開發工具。在使用過程中,我發現它與我之前用過的 Cursor 有些不同,也帶來了一些新的體驗。 初體驗:操作的便利性 一開始,我…

游戲引擎學習第256天:XBox 控制器卡頓和修復 GL Blit 伽瑪問題

回顧并為今天定下基調 今天的主要任務是讓我們的性能分析工具正常工作,因為昨天已經完成了結構性工作。現在,剩下的工作大部分應該是調試和美化。性能分析工具現在應該已經基本可用了。昨天我們在這個方面取得了很大的進展。 接下來,我們將…

PVD中斷檢測掉電

文章目錄 概述配置掉電擦寫注意 概述 STM32 PVD功能具體可以檢測到上電、掉電瞬間,其處理方式有中斷響應及事件響應。掉電設置為上升沿觸發,上電為下降沿觸發 配置 1.開啟PVD中斷并設置其優先級 2.配置響應中斷或事件的閾值電壓 3.配置響應模式 生成…

快速掌握--cursor

Cursor - The AI Code Editor 官網下載安裝 詳細教程:cursor 下載安裝使用(保姆教程)_cursor下載-CSDN博客 不知道為啥,第一次給我用的是繁體回答 然后改了一下詢問方式 codebase就是告訴ai可以從整個項目中找答案&#xff0…

1993年地級市民國鐵路開通數據(地級市工具變量)

1993年地級市民國鐵路開通數據(地級市工具變量) 1、時間:1933年 2、指標:是否開通鐵路 3、來源:《Z國鐵道便覽》 4、方法說明:參考田坤(2023)參考章元(2008&#xff…

AI優化SEO關鍵詞實踐路徑

內容概要 隨著人工智能技術深度滲透數字營銷領域,SEO關鍵詞優化正經歷從人工經驗驅動向算法智能決策的躍遷。本文聚焦AI技術在SEO關鍵詞全生命周期管理中的應用框架,系統闡述智能算法如何通過海量數據挖掘潛在搜索需求、解析用戶意圖的語義關聯性&#…

論微服務架構及其應用

試題四 論微服務架構及其應用 微服務提倡將單一應用程序劃分成一組小的服務,服務之間互相協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務與服務間采用輕量級的通信機制互相溝通。在微服務架構中,每個服務…

基于SpringBoot+Vue實現的電影推薦平臺功能三

一、前言介紹: 1.1 項目摘要 2023年全球流媒體用戶突破15億,用戶面臨海量內容選擇困難,傳統推薦方式存在信息過載、推薦精準度低等問題。傳統推薦系統存在響應延遲高(平均>2s)。隨著互聯網的快速發展,…

ARM 算數指令

加法 ADD 減法 SUB 取負 NEG 比較 CMP 乘法 MUL 移位 LSL、LSR、ASL、ASR、ROL、ROR加法和減法 絕大多數微處理器都實現了帶進位的加法指令,能夠將兩個操作數和條件碼寄存器中的進位位加到一起。這條指令會使字長大于計算機固有字長的鏈接運算更加方便。 說明了如何…

JAVA---集合ArrayList

集合 1. 自動擴容 ,集合長度可變 2. 只可以存引用數據類型,如果要存基本數據類型,需要將其轉換成對應的包裝類 ArrayList 定義在 java.util 下的,實現了 List 接口。ArrayList 內部以動態數組的形式存儲元素,這意…

Scrapy框架之【settings.py文件】詳解

settings.py 文件的主要作用是對 Scrapy 項目的全局設置進行集中管理。借助修改這個文件中的配置項,你可以對爬蟲的行為、性能、數據處理等方面進行靈活調整,而無需修改爬蟲代碼。 ①默認英文注釋settings.py # Scrapy settings for douban project # …

Java變量學習筆記

Java變量 -為什么需要變量? 一個程序就是一個世界 變量是程序的基本組成單位 不論是使用哪種高級程序語言編寫程序,變量都是其程序的基本組成單位,比如: //變量有三個基本要素(類型名稱值) class Test{public static void main(String [largs){int a1;…

數據結構*隊列

隊列 什么是隊列 是一種線性的數據結構,和棧不同,隊列遵循“先進先出”的原則。如下圖所示: 在集合框架中我們可以看到LinkedList類繼承了Queue類(隊列)。 普通隊列(Queue) Queue中的方法 …

Nginx — 防盜鏈配置

防盜鏈簡述 防盜鏈是一種保護網絡資源所有者權益的技術手段,旨在防止未經授權的用戶或網站通過直接鏈接的方式盜用資源,以下是關于防盜鏈的簡述: 原理 基于請求頭驗證:服務器通過檢查請求頭中的特定字段,如Referer字…

【淺學】Windows下ffmpeg+nginx+flv將本地視頻推流在本地搭建的Web前端頁面中播放,超詳細步驟

Nginx安裝和配置 下載nginx-1.19.3-http-flv 模塊預編譯包并解壓放在d盤,路徑就跟安裝步驟里說的一樣(如下圖),不然會有其他問題出現。 打開conf/nginx.conf,查看RTMP和http相關的配置,確認端口號和路由名稱 ffpemg推流視頻…

Ubuntu-tomcat安裝部署

https://blog.csdn.net/weixin_43877427/article/details/144697087 Linux下Tomcat安裝與配置_tomcat linux安裝及配置教程-CSDN博客 一、下載Tomcat 1、官網下載 進入后根據自己需要選擇不同的版本,點擊download 進入后,在下圖標注的里邊選擇要下載…