gin数据解析和绑定

这篇具有很好参考价值的文章主要介绍了gin数据解析和绑定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Json 数据解析和绑定

  • 客户端传参,后端接收并解析到结构体
package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

// 定义接收数据的结构体
type Login struct {
   // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
   User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
   Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
   // 1.创建路由
   // 默认使用了2个中间件Logger(), Recovery()
   r := gin.Default()
   // JSON绑定
   r.POST("loginJSON", func(c *gin.Context) {
      // 声明接收的变量
      var json Login
      // 将request的body中的数据,自动按照json格式解析到结构体
      if err := c.ShouldBindJSON(&json); err != nil {
         // 返回错误信息
         // gin.H封装了生成json数据的工具
         c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
         return
      }
      // 判断用户名密码是否正确
      if json.User != "root" || json.Pssword != "admin" {
         c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
         return
      }
      c.JSON(http.StatusOK, gin.H{"status": "200"})
   })
   r.Run(":8000")
}

2. 表单数据解析和绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">
        用户名<input type="text" name="username"><br>
        密码<input type="password" name="password">
        <input type="submit" value="提交">
    </form>
</body>
</html>
package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // JSON绑定
    r.POST("/loginForm", func(c *gin.Context) {
        // 声明接收的变量
        var form Login
        // Bind()默认解析并绑定form格式
        // 根据请求头中content-type自动推断
        if err := c.Bind(&form); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判断用户名密码是否正确
        if form.User != "root" || form.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}

3. URI数据解析和绑定

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定义接收数据的结构体
type Login struct {
    // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // JSON绑定
    r.GET("/:user/:password", func(c *gin.Context) {
        // 声明接收的变量
        var login Login
        // Bind()默认解析并绑定form格式
        // 根据请求头中content-type自动推断
        if err := c.ShouldBindUri(&login); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判断用户名密码是否正确
        if login.User != "root" || login.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}

参考文章:

https://www.fansimao.com/928784.html

https://www.fansimao.com/928797.html

https://www.fansimao.com/928805.html文章来源地址https://www.toymoban.com/news/detail-811349.html

到了这里,关于gin数据解析和绑定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Go学习第十五章——Gin参数绑定bind与验证器

    Go学习第十五章——Gin参数绑定bind与验证器

    在Gin框架中, bind 用于绑定参数,即将请求参数绑定到结构体中。通过使用 bind ,我们可以方便地将请求参数与结构体字段进行绑定,从而更方便地处理和验证参数。 Gin框架提供了多种绑定方法,包括Query参数绑定、Form参数绑定、JSON参数绑定等。下面分别介绍这些方法的详

    2024年02月07日
    浏览(12)
  • WPF 入门笔记 - 04 - 数据绑定

    WPF 入门笔记 - 04 - 数据绑定

    慢慢来,谁还没有一个努力的过程。 --网易云音乐 数据绑定概述 (WPF .NET) 什么是数据绑定? 数据绑定(Data Binding)是 WPF 一种强大的机制,用于在应用程序的各个部分之间建立数据的双向关联。它允许你将数据从一个源(例如对象、集合、数据库等)绑定到目标控件的属性,

    2024年02月09日
    浏览(10)
  • WPF 入门笔记 - 04 - 数据绑定 - 补充内容:资源基础

    WPF 入门笔记 - 04 - 数据绑定 - 补充内容:资源基础

    宇宙很大,生活更大,也许以后还有缘相见。 --三体 🌌 💭 该篇作为[WPF 入门笔记 - 04 - 数据绑定] - Additional Content 章节的补充内容 XAML 资源概述 (WPF .NET) WPF中的每一个元素都有一个 Resources 属性,该属性存储了一个资源字典集合。一般来说,可以把WPF的资源按照不同的性质分

    2024年02月11日
    浏览(10)
  • WPF 零基础入门笔记(3):数据绑定详解(更新中)

    WPF 零基础入门笔记(3):数据绑定详解(更新中)

    WPF基础知识博客专栏 WPF微软文档 WPF控件文档 B站对应WPF数据绑定视频教程 我们在之前的文章中,详细解释了数据模版和控件模板。简单来说数据模板和控件模板就是为了解决代码重复的问题。我们可以回顾一下之前的所有内容。 为了不写重复的样式,WPF提供了样式设置 为了

    2024年02月11日
    浏览(31)
  • Python爬虫入门:HTTP与URL基础解析及简单示例实践

    Python爬虫入门:HTTP与URL基础解析及简单示例实践

    在数字化时代,数据已成为一种宝贵的资源。Python作为一种强大的编程语言,在数据采集和处理方面表现出色。爬虫技术,即网络爬虫,是Python中用于数据采集的重要工具。本文作为Python爬虫基础教程的第一篇,将深入讲解URL和HTTP的基础知识,为后续的爬虫实践打下坚实的基

    2024年03月22日
    浏览(12)
  • Go语言工程实践之测试与Gin项目实践

    Go语言工程实践之测试与Gin项目实践

    回归 测试 一般是QA(质量保证)同学 手动通过终端回归一些固定的主流程 场景 集成 测试 是对 系统功能维度做测试验证 ,通过服务暴露的某个接口,进行自动化测试 而 单元 测试 开发阶段,开发者 对单独的函数、模块做功能验证 层级从上至下, 测试成本逐渐减低 ,而测试 覆

    2024年02月13日
    浏览(31)
  • 【微信小程序入门到精通】— 带你揭开数据绑定的真面目

    【微信小程序入门到精通】— 带你揭开数据绑定的真面目

    对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的同时也将其分享给大家! 本篇文章主要介绍数据绑定这一名词,那么我们如何在小程序页面定义数据并且使用呢? 首先我们介绍一下数据绑定

    2024年02月09日
    浏览(12)
  • 基于Gin框架的HTTP接口限速实践

    基于Gin框架的HTTP接口限速实践

    在当今的微服务架构和RESTful API主导的时代,HTTP接口在各个业务模块之间扮演着重要的角色。随着业务规模的不断扩大,接口的访问频率和负载也随之增加。为了确保系统的稳定性和性能,接口限速成了一个重要的话题。 1 接口限速的使用场景 接口限速的使用场景主要涉及以

    2024年02月10日
    浏览(9)
  • Golang Gin HTTP 请求和参数解析

    Golang Gin HTTP 请求和参数解析

    我们介绍了Gin框架,并做了Gin框架的安装,完成了第一个Gin工程的创建。 创建Engine 在gin框架中,Engine被定义成为一个结构体,Engine代表gin框架的一个结构体定义, 其中包含了路由组、中间件、页面渲染接口、框架配置设置等相关内容。 默认的Engine可以通过gin.Default进行创建

    2024年02月01日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包