3.Gin 框架中的路由简要说明

3.Gin 框架中的路由简要说明

Gin 框架中的路由

路由概述

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)

组成的,涉及到应用如何响应客户端对某个网站节点的访问。

RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路

由的时候建议参考 RESTful API 指南。

在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:

GET(SELECT)从服务器取出资源(一项或多项)
POST(CREATE)在服务器新建一个资源
PUT(UPDATE)在服务器更新资源(客户端提供改变后的完整资源)
DELETE(DELETE)从服务器删除资源

简单的路由配置

简单的路由配置
GET 请求示例
66c5ec8fa9a9c479018c121864dec8f6.png
1695656801157
// GET 请求示例
r.GET("/hello", func(c *gin.Context) {c.JSON(200, gin.H{"message": "hello....",})
})

测试如下:

curl -X GET  http://localhost:8000/hello
290f4411ec3ff28228c0bb0fcce98a50.png
1695657576419
POST请求示例
// POST 请求示例
r.POST("/add", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "add",})
})

测试如下:

curl -X POST -H "Content-Type: application/json"  http://localhost:8000/add
93b167c94fd5734d1c84d93846608d27.png
1695657740216
PUT请求示例
// PUT 请求示例
r.PUT("/put", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "put",})
})

测试如下:

curl -X PUT -H "Content-Type: application/json"  http://localhost:8000/put
0752c2fa2418b26117148d1e2e5c7acb.png
1695658030962
DELETE请求
// DETELE 请求示例
r.DELETE("/delete", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "delete",})
})

测试如下:

curl -X DELETE -H "Content-Type: application/json"  http://localhost:8000/delete
f92012e54f7253dda891840d2a704615.png
1695658161530
获取query参数、路径参数
路由里面获取 Query 参数
// GET 获取query参数示例
r.GET("/user", func(c *gin.Context) {// 获取query参数uid := c.Query("uid")// 返回响应信息c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("uid=%s", uid),})
})

测试如下:

curl -X GET  http://localhost:8000/user?uid=test001
c123d2985c09d5051735f701133fd54f.png
1695660194092

获取动态路由的路径参数

// GET 获取path路径参数
r.GET("/book/:bid", func(c *gin.Context) {// 获取path参数bid := c.Param("bid")// 返回响应信息c.JSON(http.StatusOK, gin.H{"message": fmt.Sprintf("bid=%s", bid),})
})

测试 如下:

curl -X GET  http://localhost:8000/book/bid001
b06c5ab59fcf4fd53899b73844ad8ef9.png
1695660700658
路由响应数据:c.String() c.JSON() c.JSONP() c.XML() c.HTML()
c.String() 返回一个字符串

在上面的代码示例中,其实已经使用过了。

// c.String 响应内容为字符串
r.GET("/news", func(c *gin.Context) {// 获取参数aid := c.Query("aid")// 返回字符串c.String(http.StatusOK, "aid=%s", aid)
})

测试如下:

curl -X GET  http://localhost:8000/news?aid=aid001
01a7a92eaeaafa3f0eb7b6eb176cd45a.png
1695740680020
c.JSON() 返回 JSON 字符串
r.GET("/json1", func(c *gin.Context) {// 使用 map[string]any  返回json内容c.JSON(200, map[string]any{"code": 0,"data": "json1",})
})r.GET("/json2", func(c *gin.Context) {// gin.H 是 map[string]any的缩写c.JSON(200, gin.H{"code": 0,"data": "json2",})
})r.GET("/json3", func(c *gin.Context) {// 使用结构体设置JSON结构var msg struct {Name    string `json:"user"` // 使用`json:"user"` 定义json字符串返回的别名,例如Name在json字符串中为userMessage string `json:"message"`Age     int    `json:"age"`}msg.Name = "lijw"msg.Message = "Hello world!"msg.Age = 18// 使用结构体对象,返回JSON数据c.JSON(http.StatusOK, msg)
})

测试如下:

curl -X GET  http://localhost:8000/json1
curl -X GET  http://localhost:8000/json2
curl -X GET  http://localhost:8000/json3
f8c6e17b0f31d5090ecb27694b3745b5.png
1695741515412
c.JSONP() 返回回调JSON
// c.JSONP() 返回回调JSON
r.GET("/JSONP", func(c *gin.Context) {data := map[string]interface{}{ "foo": "bar", }// /JSONP?callback=x// 将输出:x({\"foo\":\"bar\"})c.JSONP(http.StatusOK, data)
})

测试如下:

curl -X GET  http://localhost:8000/JSONP
curl -X GET  http://localhost:8000/JSONP?callback=x
a71213fcb1fa2916e5b04b7cc99930e7.png
1695741865466
c.XML() 返回 XML 数据
// c.XML() 返回 XML 数据
r.GET("/xml1", func(c *gin.Context) {// 方式一:手动拼接JSONc.XML(http.StatusOK, gin.H{"code": 0,"data": "xml1",})
})r.GET("/xml2", func(c *gin.Context) {// 方法二:使用结构体type MessageRecord struct {Name    string `xml:"name"`Message string `xml:"data"`Age     int    `xml:"age"`}var msg MessageRecordmsg.Name = "lijw"msg.Message = "Hello world!"msg.Age = 18// 返回XML格式内容c.XML(http.StatusOK, msg)
})

测试如下:

http://localhost:8000/xml1

519e9545ee42158ebb3f5f01e1b841ae.png
1695742445725

http://localhost:8000/xml2

ff6e21dc97e6e08e994b3c9f4ccc776c.png
1695742466927
c.HTML 渲染模板
创建用于渲染的模板html
a79c7a80fc50251fef24bd56264f4d13.png
1695745504219

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>index</h1><h2>渲染的内容: {{.title}}</h2>
</body>
</html>

templates/goods.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>商品页面</h1><h2>渲染的内容: {{.title}}</h2>
</body>
</html>
路由加载模板文件
af5bffe8ff9566536df6f9aece708602.png
1695745561929
// 加载模板文件
r.LoadHTMLGlob("templates/*")
渲染模板
// c.HTML 渲染模板
r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"title": "前台首页"})
})
r.GET("/goods", func(c *gin.Context) {c.HTML(http.StatusOK, "goods.html", gin.H{"title": "商品页面"})
})
测试如下

访问 http://localhost:8000/index

fe8c882e1899a22b1ef872a649900762.png
1695745687350

访问 http://localhost:8000/goods

9260b679be18fcf8c21b0693487242c7.png
1695745711391

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot——启动类的原理

优质博文&#xff1a;IT-BLOG-CN SpringBoot启动类上使用SpringBootApplication注解&#xff0c;该注解是一个组合注解&#xff0c;包含多个其它注解。和类定义SpringApplication.run要揭开SpringBoot的神秘面纱&#xff0c;我们要从这两位开始就可以了。 SpringBootApplicati…

VUE语法-$refs和ref属性的使用

1、$refs和ref属性的使用 1、$refs:一个包含 DOM 元素和组件实例的对象&#xff0c;通过模板引用注册。 2、ref实际上获取元素的DOM节点 3、如果需要在Vue中操作DOM我们可以通过ref和$refs这两个来实现 总结:$refs可以获取被ref属性修饰的元素的相关信息。 1.1、$refs和re…

解决ElementUI时间选择器回显出现Wed..2013..中国标准时间.

使用饿了么组件 时间日期选择框回显到页面为啥是这样的&#xff1f; 为什么再时间框中选择日期&#xff0c;回显页面出现了这种英文格式呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 其实这个问题直接使用elementui的内置属性就能解决 DateTimePicker 日期时间选择…

搭个网页应用,让ChatGPT帮我写SQL

大家好&#xff0c;我是凌览。 开门见山&#xff0c;我搭了一个网页应用名字叫sql-translate。访问链接挂在我的个人博客(https://linglan01.cn/about)导航栏&#xff0c;也可以访问https://www.linglan01.cn/c/sql-translate/直达sql-translate。 它的主要功能有&#xff1a;…

Linux上通过SSL/TLS和start tls连接到LDAP服务器

一&#xff0c;大致流程。 1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书&#xff0c;服务器证书&#xff0c;因为SSL/TLS&#xff0c;start tls都属于机密通信&#xff0c;需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具&am…

基于JavaWeb+SSM+Vue家庭记账本微信小程序系统的设计和实现

基于JavaWebSSMVue家庭记账本微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1选题背景 互联网是人类的基本需求&#xff0c;特别是在现代社会&#xff0c;个人…

Django(九、cookie与session)

文章目录 一、cookie与session的介绍HTTP四大特性 cookiesession Django操作cookie三板斧基于cookie的登录功能 一、cookie与session的介绍 在讲之前我们先来回忆一下HTTP的四大特性 HTTP四大特性 1.基于请求响应 2.基于TIC、IP作用于应用层上的协议 3.无状态 保存…

No matching variant of com.android.tools.build:gradle:7.4.2 was found.

一、报错信息 创建个新项目&#xff0c;运行直接报错&#xff0c;信息如下&#xff1a; No matching variant of com.android.tools.build:gradle:7.4.2 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar,…

Windows安装Hadoop运行环境

1、下载Hadoop 2、解压Hadoop tar zxvf hadoop-3.1.1.tar.gz3、设置Hadoop环境变量 3.1.1、系统环境变量 # HADOOP_HOME D:\software\hadoop-3.1.13.1.2、Path 环境变量 %HADOOP_HOME%\bin %HADOOP_HOME%\sbin3.1.3、修改Hadoop文件JAVA_HOME 注 : 路径中不要出现空格 ,…

分享一篇很就以前的文档-VMware Vsphere菜鸟篇

PS&#xff1a;由于内容是很久以前做的记录&#xff0c;在整理过程中发现了一些问题&#xff0c;简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面&#xff0c;属于是最底层&#xff0c;而新创建的CentOS则是嵌套后创建的操作系统&#xff0c;这点希望…

AT89S52单片机的最小应用系统

目录 ​一.时钟电路设计 1.内部时钟方式 2.外部时钟方式 3.时钟信号的输出 二.机器周期&#xff0c;指令周期与指令时序 1.时钟周期 2.机器周期 3.指令周期 三.复位操作和复位电路 1.复位操作 2 复位电路设计 四.低功耗节电模式 AT89S52本身片内有8KB闪烁存储器&am…

④【Set】Redis常用数据类型: Set [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis Set ④Redis Set 操作命令汇总1. sadd …