golang语言系列:Web框架+路由 之 Gin

news2024/11/25 0:27:58

云原生学习路线导航页(持续更新中)

本文是golang语言学习系列,本篇对Gin框架的基本使用方法进行学习

1.Gin框架是什么

  • Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者
  • Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们也推荐您使用 Gin
  • Gin 的官网:https://gin-gonic.com/zh-cn/
  • Gin 官方文档地址:https://gin-gonic.com/zh-cn/docs/
    • 有中文文档,可以直接看文档学习
  • Github 地址:https://github.com/gin-gonic/gin

2.Gin框架快速入门

2.1.快速入门

  • 有一篇博客写的非常详细,直接看这个入门就行
    • Golang gin框架
  • 按照上面博客学习过程中,可能遇到的疑问,写在 2.2 中

2.2.学习上面博客可能遇到的问题

2.2.1.Json和JsonP的区别

  • JSON(JavaScript Object Notation)和JSONP(JSON with Padding)是两种用于在网络上传输数据的格式,二者区别如下。
  • JSON(JavaScript Object Notation)
    • JSON 是一种数据格式,用于在不同的系统之间传输数据。
    • JSON 是纯文本,易于阅读和编写,也易于解析和生成。
    • JSON 数据可以表示为对象、数组、字符串、数字、布尔值和 null。
    • JSON 数据格式不支持跨域请求。
  • JSONP(JSON with Padding)
    • JSONP 是 JSON 的一种“使用模式”,用于解决跨域请求的问题。
    • JSONP 实际上是在 JSON 数据周围包裹了一个函数调用,这个函数名由客户端指定。
      • JSONP的请求,客户端需要在url后使用 ? 指定一个 callback 查询参数
      • 因此,在上面的博客中,jsonp请求的响应,会被客户端传入的callback包裹起来,形成callback调用
    • JSONP 的工作原理是通过动态创建 <script> 标签,将请求发送到另一个域上的 JSONP 服务端点,并且该服务端点返回的数据已经包含在了指定的函数调用中。
    • JSONP 允许在不同域之间进行数据交换,绕过了浏览器的同源策略限制。
  • 总结
    • JSON 是一种数据格式,而 JSONP 则是使用 JSON 数据进行跨域请求的一种技术
    • JSONP 通常用于处理由浏览器的同源策略引起的限制,允许在不同域之间进行数据交换

2.2.2.HTML模板渲染讲的不清楚

  • html渲染,上面博客说的不清楚,建议看官方文档:
    • https://gin-gonic.com/zh-cn/docs/examples/html-rendering/

2.2.3.请求参数绑定结构体重点

  • 标记的使用

    • url后使用?传递的查询参数请求体为"user=123&password=456"这种格式的body,需要结构体设置 form 才可以使用 gin 的自动绑定
      type Userinfo struct {
      	Username string `form:"user"`
      	Password string `form:"password"`
      }
      
    • 不过现在的post请求,请求体为 “application/json”,结构体设置json标记可选
      // 设置json,需要按照json标记来,可以绑定 {"user": "123", "pwd": "456"}
      type Userinfo struct {
      	Username string `json:"user"`
      	Password string `json:"pwd"`
      }
      
      // 没有设置json,则请求体需要和属性名一致,可以绑定 {"username": "123", "password": "456"}
      type Userinfo struct {
      	Username string `form:"user"`
      	Password string `form:"pwd"`
      }
      
    • 路径参数,需要使用uri参数
      // 接口可以是 */:user/:pwd
      type Userinfo struct {
      	Username string `uri:"user"`
      	Password string `uri:"pwd"`
      }
      
    • Header 头信息绑定,需要使用header参数
  • gin.Context 的绑定方法使用

    • 我们用的最多的绑定方法是 c.ShouldBind(),可以根据req的Context-Type自动推断要绑定的类型
    • 不过 gin.Context 为 很多类型编写了绑定方法,如果你明确知道前端穿过来的数据是什么格式,可以直接使用这些方法
      在这里插入图片描述
    • 可以看到,gin.Context有两个系列方法,Bindxxx和ShouldBindxxx方法,二者区别如下
      • Bind 系列方法:
        • Bind系列方法在绑定失败时会直接将错误信息发送给客户端,并终止请求处理。
        • 这意味着如果绑定失败,客户端将收到一个包含错误信息的响应,并且请求处理将不会继续进行。
      • ShouldBind 系列方法:
        • ShouldBind系列方法在绑定失败时不会立即将错误信息发送给客户端,而是将错误信息存储在上下文中。
        • 这使得开发者可以根据实际情况自定义错误处理逻辑,例如返回特定的错误响应、记录错误日志等。
        • 开发者可以通过检查上下文中的错误信息来判断绑定是否成功,并根据需要采取进一步的行动。
  • 更详细的用法,可以学习:

    • Gin 框架学习笔记(02)— 参数自动绑定到结构体
    • Go学习第十五章——Gin参数绑定bind与验证器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目基于Springboot和Vue的高校心理教育辅导系统的设计与实现

今天要和大家聊的是基于Springboot和Vue的高校心理教育辅导系统的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&…

C++完美转发(适合小白)

我们知道&#xff0c;C中有左值引用和右值引用&#xff0c;首先我们要知道什么是左值什么是右值。 左值&#xff1a;表达式结束后依然存在的持久对象。左值可以出现在赋值语句的左边或右边。例如&#xff0c;变量和函数返回的引用都是左值。左值通常有持久的地址&#xff0c;可…

Python深度学习034:cuda的环境如何配置

文章目录 1.安装nvidia cuda驱动CMD中看一下cuda版本:下载并安装cuda驱动2.创建虚拟环境并安装pytorch的torch_cuda3.测试附录1.安装nvidia cuda驱动 CMD中看一下cuda版本: 注意: 红框的cuda版本,是你的显卡能装的最高的cuda版本,所以可以选择低于它的版本。比如我的是11…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…

HTML基本元素

文章目录 如何制作标题如何制作文字如何做粗体字检查我们程序码给输出文字添加属性 HTML 一个HTML标签包含着&#xff1a; 起始标签&#xff1a;它包含了元素的名字&#xff0c;夹在一对 <、>&#xff08;尖括号&#xff09;之间。它指明元素从何处开始生效。结束标签&am…

《Git版本控制管理》笔记

第三章 git --version查看版本号git --help查看帮助文档裸双破折号分离参数 git diff -w master origin – tools/Makefile将当前目录或任何目录转化为Git版本库 git init 初始化之后项目目录中&#xff0c;有名为.git的文件git status 查看git状态git commit 提供日志消息和作…

整型之韵,数之舞:大小端与浮点数的内存之旅

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱’博客 所属栏目&#xff1a;人工智能 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 1.0 整形提升 我们先来看看代码。 int main() {char a 3;char b 127;char …

Java基础核心Map

在Java中&#xff0c;Map是一种用于存储键值对&#xff08;key-value pairs&#xff09;的集合类型。它提供了一种将键映射到值的方式&#xff0c;其中每个键在Map中都是唯一的。Map接口是java.util包中的一部分。 常用实现类&#xff1a; HashMap: 基于哈希表实现的Map&#…

java中split(“.“)失效问题

来源&#xff1a;比较版本号_牛客题霸_牛客网 在写到这道算法题的时候&#xff0c;发现一个问题&#xff0c; String[] leftversion1.split("."); 返回结果为空&#xff0c;经过查阅得知&#xff0c;是split中的正则表达式里的问题&#xff0c;这个 . 代表的意思是…

KIMI官方精选提示词,好牛的感觉啊啊啊!

晚上好&#xff0c;我是云桃桃。一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0…

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树&#xff0c;比如下面这幅图&#xff0c;红色的边就组成了两棵不同的生成树&#xff1a; 对于加权图&#xff0c;每条边都有权重&#xff08;用最小生成树算法的现实场景中&#xff0c;图的边权重…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…

Ethernet修改网卡名称

如何修改Ethernet网卡名称 kernel/common/net/core/dev.c ---------------------------------------------------------------------- 8849/** 8850 * register_netdev - register a network device 8851 * @dev: device to register 8852 * 8853 * Take a completed network d…

github本地仓库push到远程仓库

1.从远程仓库clone到本地 2.生成SSH秘钥&#xff0c;为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对&#xff0c;-t代表类型&#xff0c;有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…

什么是数据库的下一站?

SU7 能突出重围&#xff1f; 3 月 28 日&#xff0c;小米发布 SU7。罗永浩在社交平台发文谈小米SU7&#xff0c;“各种补贴拿完了差不多20万吧&#xff0c;足以把这个价位段的大部分油车、杂牌电车、不够智能的电车都淘汰掉了。小米很可能继平价手机市场之后&#xff0c;在大众…

微信小程序开发学习笔记——4.6tabBar底部tab栏配置用法

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、tabBar https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 二、icon下载 https://www.iconfont.cn/collections/index?spma…

js实现websocket断线重连功能

在项目开发中我们可能经常要使用websocket技术&#xff0c;当连接发生断线后&#xff0c;如果不进行页面刷新将不能正常接收来自服务端的推送消息。为了有效避免这种问题&#xff0c;我们需要在客户端做断线重连处理。当网络或服务出现问题后&#xff0c;客户端会不断检测网络状…

一个在线的NodeJS环境和终端运行界面

WebContainer 是一个基于浏览器的运行时&#xff0c;用于执行 Node.js 应用程序和操作系统命令&#xff0c;完全在浏览器选项卡内。以前需要云虚拟机来执行用户代码的应用程序&#xff0c;在 WebContainers 中可以完全在客户端运行与传统云虚拟机相比具有许多优势。 WebContai…

卡尔曼滤波笔记

资料&#xff1a;https://www.zhihu.com/question/47559783/answer/2988744371 https://www.zhihu.com/question/47559783 https://blog.csdn.net/seek97/article/details/120012667 一、基本思想 在对一个状态值进行估计的时候&#xff0c;如果想测量值更准&#xff0c;很自然…

数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

千万不要因为一件事不会做而失去信心&#xff0c;你又不是只有这一件事不会&#xff0c;你还有很多呢 一、插入排序 1.直接插入排序 InsertSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.希尔排序 ShellSort 2.1 基本思想 2.2 实现原理 …