Gin各種參數接收

Gin參數接收

文章目錄

  • Gin參數接收
    • 1.各個參數的接收方法
      • Gin中發送JSON數據
      • Gin接收querystring數據
      • Gin接收Form的參數
      • Gin接收URI參數
    • 2.參數綁定方式接收(更加方便)
      • 推薦一款軟件

1.各個參數的接收方法

  • 聲明: 這里的c都是c *gin.Context中的c

Gin中發送JSON數據

  • 在傳輸或接受JSON數據時,通常習慣通過創建結構體的方式存儲數據

  • 注意點:

      1. 結構體中成員名需要大寫字母開頭,否則無法訪問
      2. 需要再成員名后添加tag標簽 ,方便傳輸以及接收數據
  • 方法

    func (c *Context) JSON(code int, obj any) {}
    
    • code是狀態碼,例如:http.StatusOK這是go語言內置變量
    • obj指需要傳入的數據
  • 代碼案例:

    package mainimport ("github.com/gin-gonic/gin""log""net/http"
    )// User 構建數據結構(存儲json數據
    // 注意:1.需要大寫字母開頭否則無法訪問
    // 注意:2.`json`是tag標簽,這樣方便定義前端顯示名稱
    type User struct {Name   string `json:"name"`Gender string `json:"gender"`Age    int    `json:"age"`
    }func main() {//啟動服務器r := gin.Default()//發起請求r.GET("/Json", func(c *gin.Context) {data := &User{Name:   "賢哥",Gender: "男",Age:    18,}c.JSON(http.StatusOK, gin.H{"data": data,})})//運行服務器err := r.Run(":9000")if err != nil {log.Println("啟動錯誤:", err)}
    }
    • 傳數據習慣用gin中的gin.H{}

Gin接收querystring數據

  • 介紹:

    • //querystring 數據是在URl上的參數,例如:https://www.bing.com/search?q=鄧超
      //這里的"q = 鄧超"就是querystring,其中q是變量,鄧超是值
      
  • 方法:

    • c.Query(key):根據變量名接收值
    • c.DefaultQuery(key,defaultValue):根據變量名接收值,如果沒有該變量,就輸出定義好的值
    • c.GETQuery(key):返回值有兩個,一個是接收到的值,一個是布爾值,可以通過判斷布爾值查看是否接受到值
  • 代碼案例

    package mainimport ("github.com/gin-gonic/gin""log""net/http"
    )//querystring 數據是在URl上的參數,例如:https://www.bing.com/search?q=鄧超
    //這里的"q = 鄧超"就是querystring,其中q是變量,鄧超是值type User struct {Name string `json:"name"`Age  string `json:"age"`
    }func main() {//創建Gin變量r := gin.Default()//發起請求r.GET("/query", func(c *gin.Context) {//單純接收querystring的值data1 := c.Query("query")//接收querystring,如果沒有接收到值就,輸出定義好的值(類似這里的nothing)data2 := c.DefaultQuery("query", "nothing")//獲取querystring的值,返回當前值和bool值,如何bool為false,默認返回空值data3, ok := c.GetQuery("query")if !ok {data3 = "nothing"}//可以將querystring的值,解析到結構體中存儲//注意:結構體的成員名和querystring的變量名必須一致,否則解析不到var user Usererr := c.BindQuery(&user)if err != nil {log.Println(err)return}//可以用于相同變量卻有多個值的情況接收變量,接收后的變量會被保存在切片中//query=尼瑪&query=tm 輸出 "query4":["尼瑪","tm"]data4 := c.QueryArray("query")//通過Json數據發出c.JSON(http.StatusOK, gin.H{"query1": data1,"query2": data2,"query3": data3,"query4": data4,"user":   user,})})//啟動服務器err := r.Run(":9000")if err != nil {log.Println("啟動失敗:", err)}
    }

Gin接收Form的參數

  • 結論: 方法的用法和querystring的基本一致

  • 代碼:

    package mainimport ("github.com/gin-gonic/gin""log""net/http"
    )//任務:接收form的數據
    //1.創建form表單
    //2.解析數據func main() {r := gin.Default()//解析模板r.LoadHTMLFiles("./login.html", "./index.html")//渲染模板(渲染登錄頁面r.GET("/login", func(c *gin.Context) {c.HTML(http.StatusOK, "login.html", nil)})//點擊form的登錄按鈕提交數據后會發起method方法的請求//所以得寫一個post方法以及,輸出數據到post渲染的網頁r.POST("/login", func(c *gin.Context) {//單個接收表單數據//username := c.PostForm("username")password := c.PostForm("password")//單個接收表單的數據,如果沒有參數就輸出notDefault//username := c.DefaultPostForm("username", "notDefault")//以數組的方式接收值username := c.PostFormArray("username")//password, ok := c.GetPostForm("username")c.HTML(http.StatusOK, "index.html", gin.H{"username": username[0],"password": password,})//總結接收表單數據的各種函數基本和接收querystring參數的用法一致})//啟動服務器err := r.Run(":9000")if err != nil {log.Println(err)return}
    }

Gin接收URI參數

  • 介紹

    • //了解什么是URI參數
      //例如一條URL為http://ouzhenxian.com/blog/2023/1
      //這里的URL中,可以指定2023和1為參數(是否是參數是由你的接收格式決定的
      //格式: "/blog/:year/:mouth",":"后面的參數就是需要被接收的數據
      
  • c.Param方法和querystring用法基本一致

  • 代碼:

    package mainimport ("github.com/gin-gonic/gin""net/http"
    )
    func main() {r := gin.Default()r.GET("/blog/:year/:mouth", func(c *gin.Context) {year := c.Param("year")mouth := c.Param("mouth")c.JSON(http.StatusOK, gin.H{"year":  year,"mouth": mouth,})})//啟動服務器err := r.Run(":9000")if err != nil {return}
    }
    

2.參數綁定方式接收(更加方便)

  • 核心方法c.ShouldBind()

  • 優點: 相比前面的更加快捷高效

  • 代碼展示

    package mainimport ("fmt""github.com/gin-gonic/gin""log""net/http"
    )//任務: 利用ShouldBind()函數綁定參數type UserInfo struct {Username string `json:"username"  form:"username" uri:"username" query:"username"` //注意2點: 字段名需要大寫,需要寫tag,否則找不到Password string `json:"password"  form:"password" uri:"password" query:"password"`
    }func main() {r := gin.Default()//發出請求r.GET("/json", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindJSON(&user) //注意:這里需要寫&,否則是值傳遞,無法修改值if err != nil {log.Println(err)return}//處理數據fmt.Printf("%#v\n", user) //一起輸出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.GET("/query", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindQuery(&user) //注意:這里需要寫&,否則是值傳遞,無法修改值if err != nil {log.Println(err)return}//處理數據fmt.Printf("%#v\n", user) //一起輸出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.POST("/form", func(c *gin.Context) {var user UserInfoerr := c.ShouldBind(&user) //注意:這里需要寫&,否則是值傳遞,無法修改if err != nil {log.Println(err)return}//處理數據fmt.Printf("%#v\n", user) //一起輸出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.GET("/uri/:username/:password", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindUri(&user) //注意:這里需要寫&,否則是值傳遞,無法修改值if err != nil {log.Println(err)return}//處理數據fmt.Printf("%#v\n", user) //一起輸出c.JSON(http.StatusOK, gin.H{"status": "ok",})})//啟動服務器err := r.Run(":8080")if err != nil {log.Println(err)return}}
    
  • 注意點:

    • 1.結構體成員名首字母大寫
    • 2.需要指定tag
    • 3.ShouldBind()接受的值必須是地址值(例如:&user)
  • 說明: Gin框架中不是每個數據格式都有對應的ShouldBind函數

    • 例如:這里的JSON數據有—>c.ShouldBindJSON(&user),而這里的表單Form數據沒有對應的和函數,那就使用通用的c.ShouldBind(&user)

推薦一款軟件

  • Postman軟件: 在做網絡開發過程中可以非常方便的傳輸數據測試,有興趣的可以自行查看,該軟件需要科學

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

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

相關文章

33 | 美國總統數據分析

在這個數據分析項目中,利用Pandas等Python庫對美國2020年7月22日至2020年8月20日期間的超過75萬條捐贈數據進行了深入的探索和分析。通過這一分析,他們揭示了這段時間內美國選民對總統候選人的偏好和捐款情況。以下是對文章中的主要步驟和內容的進一步描述: 數據集處理: 作…

Jquery 復選框點擊生成標簽 源代碼

html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>服務資源管理</title><link rel"stylesheet" type"text/css" href"../lib/layui/css/layui.css" /><link rel"st…

2023牛客第八場補題報告A H J K

2023牛客第八場補題報告A H J K A-Alive Fossils_2023牛客暑期多校訓練營8 (nowcoder.com) 思路 統計字符串&#xff0c;取出現次數為t的。 代碼 #include <bits/stdc.h> #define int long long #define endl \n #define IOS ios::sync_with_stdio(0), cin.tie(0), …

【C++】面試題

1、都說c是面向對象的語言&#xff0c;面向對象的三個特性能 [展開] 介紹一下嗎&#xff1f; 封裝&#xff1a;封裝是一種集中管理的思想&#xff0c;把內部的數據和實現方法組合在一起&#xff0c;并且不對外暴漏內部的數據和實現方法&#xff0c;只對外提供幾個接口來完成函數…

DockePod信號處理機制與僵尸進程優化

Docke&Pod信號處理與僵尸進程優化 容器與信號的關系 SIGTERM信號&#xff1a;程序結束(terminate)信號&#xff0c;這是用來終止進程的標準信號&#xff0c;也是 kill 、 killall 、 pkill 命令所發送的默認信號。與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程…

k8s和docker簡單介紹

當涉及到容器技術和容器編排時&#xff0c;Docker和Kubernetes是兩個重要的概念。我將更詳細地介紹它們以及它們之間的關系。 Docker&#xff1a; Docker是一種容器化技術&#xff0c;它允許你將應用程序及其依賴項打包到一個稱為"容器"的封閉環境中。每個容器都包…

rust包跨平臺編譯,macbook ,linux

在 MacBook 上編譯 Rust 項目并生成 Linux 包需要一些步驟。以下是一般的步驟概述&#xff1a; 1. **安裝所需工具&#xff1a;** 首先&#xff0c;確保您的 MacBook 上已經安裝了所需的工具。您需要 Rust 編程語言的工具鏈以及一些用于交叉編譯到 Linux 的工具。 - 安裝 R…

【BASH】回顧與知識點梳理(二十一)

【BASH】回顧與知識點梳理 二十一 二十一. Linux 的文件權限與目錄配置21.1 使用者與群組屬主(文件擁有者)屬組(群組概念)其他人的概念root(萬能的天神)Linux 用戶身份與群組記錄的文件 21.2 Linux 文件權限概念Linux 文件屬性Linux 文件權限的重要性 21.3 如何改變文件屬性與權…

組合模式(C++)

定義 將對象組合成樹形結構以表示部分-整體’的層次結構。Composite使得用戶對單個對象和組合對象的使用具有一致性(穩定)。 應用場景 在軟件在某些情況下&#xff0c;客戶代碼過多地依賴于對象容器復雜的內部實現結構&#xff0c;對象容器內部實現結構(而非抽象接口)的變化…

Redis數據結構——鏈表list

鏈表是一種常用的數據結構&#xff0c;提供了順序訪問的方式&#xff0c;而且高效地增刪操作。 Redis中廣泛使用了鏈表&#xff0c;例如&#xff1a;列表的底層實現之一就是鏈表。 在Redis中&#xff0c;鏈表分為兩部分&#xff1a;鏈表信息 鏈表節點。 鏈表節點用來表示鏈表…

PyTorch深度學習實踐---筆記

PyTorch深度學習實踐---筆記 2.線性模型&#xff08;Linear Model&#xff09;2.exercise 3. 梯度下降算法&#xff08;Gradient Descent&#xff09;3.1梯度下降&#xff08;Gradient Descent&#xff09;3.2 隨機梯度下降&#xff08;Stochastic Gradient Descent&#xff09…

亞馬遜測評工作室怎么做?

亞馬遜是全球最大的電商平臺之一&#xff0c;任何一個賣家想要提升自己店鋪的知名度和銷量&#xff0c;都需要關注自己Listing的Review數量和星級評價&#xff0c;而測評對于賣家賬號的評定和產品曝光量有著重要影響&#xff0c;可以用于店鋪提升銷量&#xff0c;留評等 在進行…

【GC日志分析】-對象晉升到老年代分析

[GC (Allocation Failure) [PSYoungGen: 123456K->65432K(262144K)] 123456K->765432K(1048576K), 0.1234567 secs] [Times: user0.10 sys0.02, real0.13 secs] 從這段GC日志中&#xff0c;可以看到兩個年輕代和老年代的堆內存容量變化情況。 首先&#xff0c;我們來看…

百度坐標(BD09)、國測局坐標(火星坐標,GCJ02)、和WGS84坐標系之間的轉換

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><script>/*** * 百度坐標&#xff08;BD09&#xff09;、國測局坐標&#xff08;火星坐標&#xff0c;GCJ02&#xff09;、和…

c51單片機串口通信(中斷方式接收數據)(單片機--單片機通信)示例代碼 附proteus圖

單片機一般采用中斷方式接受數據&#xff0c;這樣便于及時處理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…

HOT96-只出現一次的數字

leetcode原題鏈接&#xff1a;只出現一次的數字 題目描述 給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且該算法只使…

TEXTure環境配置,跑通inference的demo

TEXTure 環境配置安裝kaolin這個包,這里可能會遇到各種問題配置huggingface的訪問令牌 運行Text Conditioned Texture Generation指令報錯1報錯2成功運行 查看結果查看貼圖后的三維網格模型 環境配置 # 創建一個名為texture的環境 conda create -n texture python3.9 -y# 激活…

EasyLLM:簡化語言模型處理,實現 OpenAI 和 Hugging Face 客戶端的無縫切換

前言 在這短短不到一年的時間里&#xff0c;國內外涌現的大型語言模型&#xff08;LLM&#xff09;可謂是百花齊放&#xff0c;不管是開源還是閉源都出現了一些非常優秀的模型&#xff0c;然而在利用LLM進行應用開發的時候&#xff0c;會發現每個模型從部署、到訓練、微調、AP…

人工智能任務1-【NLP系列】句子嵌入的應用與多模型實現方式

大家好&#xff0c;我是微學AI&#xff0c;今天給大家介紹一下人工智能任務1-【NLP系列】句子嵌入的應用與多模型實現方式。句子嵌入是將句子映射到一個固定維度的向量表示形式&#xff0c;它在自然語言處理&#xff08;NLP&#xff09;中有著廣泛的應用。通過將句子轉化為向量…

ASP.NET Core - 緩存之分布式緩存

分布式緩存是由多個應用服務器共享的緩存&#xff0c;通常作為訪問它的應用服務器的外部服務進行維護。 分布式緩存可以提高 ASP.NET Core 應用的性能和可伸縮性&#xff0c;尤其是當應用由云服務或服務器場托管時。 與其他將緩存數據存儲在單個應用服務器上的緩存方案相比&am…