Gin学习记录2——路由
路由
- 一. 常规路由
- 二. 动态路由
- 三. 带参数的路由
- 3.1 GET
- 3.2 POST
- 3.3 绑定
- 四. 简单的路由组
- 五. 文件分组
一. 常规路由
package mainimport ("net/http""github.com/gin-gonic/gin"
)func index(ctx *gin.Context) {ctx.String(http.StatusOK, "Hello Gin")
}func main() {r := gin.Default()r.GET("/", index)r.Run(":80")
}
此时访问http://localhost/即可得到:

二. 动态路由
func uid(ctx *gin.Context) {userid := ctx.Param("uid")ctx.String(http.StatusOK, "User ID is: "+userid)
}r.GET("/:uid", uid)

- 缺点是不能像
Django那样指定参数类型,这个
三. 带参数的路由
3.1 GET
对于GET方式的参数,咱们可以使用Query系列的操作
func (c *Context) Query(key string) (value string)
func (c *Context) QueryArray(key string) (values []string)
func (c *Context) QueryMap(key string) (dicts map[string]string)
func (c *Context) DefaultQuery(key, defaultValue string) string
例子:
r.GET("/AddInt", func(ctx *gin.Context) {num := ctx.Query("num")opt := ctx.DefaultQuery("option", "GET")ctx.String(http.StatusOK, "num is %s option is %s", num, opt)})

3.2 POST
POST同理
func (c *Context) DefaultPostForm(key, defaultValue string) string
func (c *Context) PostForm(key string) (value string)
func (c *Context) PostFormArray(key string) (values []string)
func (c *Context) PostFormMap(key string) (dicts map[string]string)
3.3 绑定
通过绑定,可以将各种数据绑定到各种对象上
func (c *Context) ShouldBind(obj any) error
func (c *Context) ShouldBindBodyWith(obj any, bb binding.BindingBody) (err error)
func (c *Context) ShouldBindHeader(obj any) error
func (c *Context) ShouldBindJSON(obj any) error
func (c *Context) ShouldBindQuery(obj any) error
func (c *Context) ShouldBindTOML(obj any) error
func (c *Context) ShouldBindUri(obj any) error
func (c *Context) ShouldBindWith(obj any, b binding.Binding) error
func (c *Context) ShouldBindXML(obj any) error
func (c *Context) ShouldBindYAML(obj any) error
例如:
type AddType struct {Num1 stringNum2 string
}func main() {r := gin.Default()r.GET("/AddInt", func(ctx *gin.Context) {var num AddTypeif err := ctx.ShouldBind(&num); err == nil {ctx.String(http.StatusOK, "num1 is %s num2 is %s", num.Num1, num.Num2)} else {ctx.String(http.StatusBadRequest, "Error")}})r.Run(":80")
}

但是空成员也不会报错:

四. 简单的路由组
v1 := r.Group("/v1"){v1.GET("/login", func(ctx *gin.Context) {ctx.String(http.StatusOK, "Success")})}v2 := r.Group("/v2"){v2.POST("/login", func(ctx *gin.Context) {ctx.String(http.StatusOK, "Success")})}

五. 文件分组
新建文件夹routers,并且在该文件夹下将路由分为两个:v1.go和v2.go
package routersimport ("net/http""github.com/gin-gonic/gin"
)func V1RoutesInit(router *gin.Engine) {v1Router := router.Group("/v1"){v1Router.GET("/user", func(c *gin.Context) {c.String(http.StatusOK, "v1查询")})}
}
package routersimport ("net/http""github.com/gin-gonic/gin"
)func V2RoutesInit(router *gin.Engine) {v2Router := router.Group("/v2"){v2Router.GET("/user", func(c *gin.Context) {c.String(http.StatusOK, "v2查询")})}
}
然后在main.go里:imort moudel/package ,比如"kanna-web/routers"
然后即可调用:
routers.V1RoutesInit(r)routers.V2RoutesInit(r)

相关文章:
Gin学习记录2——路由
路由 一. 常规路由二. 动态路由三. 带参数的路由3.1 GET3.2 POST3.3 绑定 四. 简单的路由组五. 文件分组 一. 常规路由 package mainimport ("net/http""github.com/gin-gonic/gin" )func index(ctx *gin.Context) {ctx.String(http.StatusOK, "Hell…...
《计算机算法设计与分析》第一章:算法概述
第一章 算法概述 1.1 算法复杂性分析 公共标准:渐进时间复杂度 (1)大O表示法: 例如: 大O表示法和前面的最坏时间复杂度的区别在于:大O表示法表示的更为简洁, 而最坏时间复杂度相对就比较繁琐&am…...
华为数通方向HCIP-DataCom H12-821题库(单选题:201-220)
第201题 BGP 协议用 beer default-route-advertise 命令来给邻居发布缺省路由,那么以下关于本地 BGP 路由表变化的描述,正确的是哪一项? A、在本地 BGP 路由表中生成一条活跃的缺省路由并下发给路由表 B、在本地 BGP 路由表中生成一条不活跃的缺省路由&…...
使用ELK收集解析nginx日志和kibana可视化仪表盘
文章目录 ELK生产环境配置filebeat 配置logstash 配置 kibana仪表盘配置配置nginx转发ES和kibanaELK设置账号和密码 ELK生产环境配置 ELK收集nginx日志有多种方案,一般比较常见的做法是在生产环境服务器搭建filebeat 收集nginx的文件日志并写入到队列(k…...
【Sentinel】ProcessorSlotChain处理器插槽链与Node
文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能,本质要做的就是两件事情: 统计数据:统计某个资源的访问数据(QPS、RT等信息)规则判断…...
数据库管理系统(DBMS)的事务四大特性(ACID)以及事务的四种隔离级别
一、什么是ACID? ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability) 的缩写,是在可靠数据库管理系统(DBMS&…...
leetcode 234. 回文链表
2023.9.5 本题先将链表的节点值移到数组中,再用双指针去判断该数组是否为回文的即可。 代码如下: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* …...
Scala集合继承体系图
Scala集合简介 1) Scala 的集合有三大类:序列 Seq、集Set、映射 Map,所有的集合都扩展自 Iterable特质。 2) 对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包 不可变集合…...
《Go 语言第一课》课程学习笔记(十五)
并发 Go 的并发方案:goroutine 并行(parallelism),指的就是在同一时刻,有两个或两个以上的任务(这里指进程)的代码在处理器上执行。 并发不是并行,并发关乎结构,并行关…...
练习 Qt 实时显示鼠标坐标位置
Qt 入门实战教程(目录) 前驱课程 本文是文章 Qt鼠标点击事件处理:显示鼠标点击位置(完整示例) 的一个作业(下文称之为“前驱课程”)。 前驱课程中,我们完整的展示了如何在QtCreat…...
Leetcode130. 被围绕的区域
Every day a Leetcode 题目来源:130. 被围绕的区域 本题给定的矩阵中有三种元素: 字母 X;被字母 X 包围的字母 O;没有被字母 X 包围的字母 O。 本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 …...
6.xpath的基本使用
xpath是python做数据解析的库 目录 1 安装 2 解析本地的html文件 2.1 只有一个标签的情况 2.2 有多个标签的情况 3 解析网上的页面 4 xpath表达式 4.1 绝对路径 4.2 两个斜杠表示中间隔了0级或多级 4.3 通过属性查找 4.4 通过索引查找 4.5 获取文本内容…...
uniapp组件库总结笔记
uView-ui uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 优点:整体样式风格不错 缺点:不支持vue3(可以使用社区维护的uview-plus uview-plus 3.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架) uni-u…...
day-42 代码随想录算法训练营 动态规划 part 04
416.分割等和子集 分析:需要总和能分成两半,并且有子集能装满一半 思路: 1.dp存储:容量为j时装入的最大数值和dp[j]2.dp[j]max(dp[j],dp[j-nums[i]]nums[i]) 3.全部初始化为04.遍历顺序:外层遍历元素,内…...
Swift 周报 第三十六期
文章目录 前言新闻和社区消息称苹果公司和印度财政部官员磋商,扩大在印度的制造产能iPhone 15 Pro 机型新增泰坦灰iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十…...
手写Mybatis:第19章-二级缓存
文章目录 一、目标:二级缓存二、设计:二级缓存三、实现:二级缓存3.1 工程结构3.2 二级缓存类图3.3 二级缓存队列3.3.1 FIFI缓存策略3.3.2 事务缓存3.3.3 事务管理3.3.4 修改一级缓存 3.4 缓存执行器3.4.1 执行器接口3.4.2 执行器抽象基类3.4.…...
Alibaba Canal 使用记录
项目中使用 canal 来同步数据到 Elasticsearch, 遇到很多问题,做一下记录: 版本问题: 1. 解析binlog出错 ,表现为 limit excceed:xx 目前使用 mariadb 10.9.7/10.10.6 canal 1.1.6 hotfix ,在这个版本组…...
GIT实战篇,教你如何使用GIT可视化工具
系列文章目录 手把手教你安装Git,萌新迈向专业的必备一步 GIT命令只会抄却不理解?看完原理才能事半功倍! 快速上手GIT命令,现学也能登堂入室 GIT实战篇,教你如何使用GIT可视化工具 系列文章目录一、GIT有哪些常用工具…...
lv3 嵌入式开发-4 linux shell命令(文件搜索、文件处理、压缩)
目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut 3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 1 …...
SpringBoot2.0集成WebSocket,多客户端
适用于单客户端,一个账号登陆一个客户端,登陆多个客户端会报错 The remote endpoint was in state [TEXT_FULL_WRITING] 这是因为此时的session是不同的,只能锁住一个session,解决此问题的方法把全局静态对象锁住,因…...
成都不良资产收包出包难?专业处置破局存量盘活困境
不仅如此,规范化的不良资产处置模式,还能助力区域化解债务风险,稳定地方金融环境,激活存量资产活力,对地方经济发展起到正向推动作用。不良资产收包出包,拼的从来不是蛮力与时间,而是专业、合规…...
系统架构设计师-2025年05月综合案例回忆版
试题 试题一(必选题) 某公司开发一个在线大模型训练平台,支持Python代码编写、模型训练和部署,用户通过python编写模型代码,将代码交给系统进行模型代码的解析,最终由系统匹配相应的计算机资源进行输出,用户不需要关心底层硬件平台,在开发该平台架构时,设计了以下质…...
别再只会写脚本了!用MATLAB面向对象编程重构你的数据处理流程(附完整Point2D类示例)
从脚本到对象:MATLAB面向对象编程的工程化实践 在科研与工程计算领域,MATLAB长期占据着不可替代的地位。然而,许多用户在使用多年后,依然停留在编写线性脚本的阶段,导致代码库逐渐演变成难以维护的"意大利面条式代…...
NVDC充电架构深度解析:智能电源管理如何提升笔记本性能与电池寿命
1. 项目概述:NVDC充电器,一个被低估的“能量管家”如果你是一位经常需要带着笔记本电脑移动办公的资深用户,或者是一位对设备续航和充电效率有极致追求的硬件爱好者,那么“NVDC”这个词,很可能已经或即将进入你的视野。…...
RK3568开发板TB-96AI-3568CE深度评测:从核心接口到AI应用实战
1. 从芯片到板卡:TB-96AI-3568CE的设计哲学当一块芯片从图纸走向现实,成为一块可以握在手中的开发板时,这中间的路程远不止是简单的引脚引出和电源接通。我接触过不少基于RK3568的方案,但拿到贝启科技这块TB-96AI-3568CE时&#x…...
嵌入式开发调试实战:从内存泄漏到死锁的排查技巧与工具链
1. 项目概述:嵌入式开发的“捉虫”艺术干了十几年嵌入式,从8位单片机玩到多核ARM Cortex-A,从裸机撸到RTOS,我最大的感受就是:嵌入式开发,七分在调试,三分在写码。你代码写得再漂亮,…...
Anaconda安装后必做的两件事:快速配置清华镜像源和验证环境(附常用conda命令清单)
Anaconda安装后的高效配置指南:镜像加速与环境验证全攻略 当你第一次打开Anaconda Prompt时,那种面对全新工具既兴奋又忐忑的心情我深有体会。作为Python数据科学领域的瑞士军刀,Anaconda的强大功能背后隐藏着许多新手容易忽略的配置细节。本…...
GIS在水环境监测、评价与污染模拟中的应用方法研究
在水文水环境保护中,对于信息的采集、处理和分析是关键步骤。水文水环境及其相关数据均具有空间分布特征,传统的方法难以发挥作用。地理信息系统(GIS)强大的空间数据管理和分析功能,在空间信息处理上有独到的优势&…...
RT-Thread裁剪实战:从98KB到28KB的嵌入式系统瘦身指南
1. 项目概述:为什么我们需要裁剪RT-Thread?如果你是一名嵌入式软件工程师,或者正在学习RT-Thread,那么“裁剪”这个词对你来说一定不陌生。RT-Thread作为一款优秀的国产开源实时操作系统,其标准版(或称完整…...
【亲测免费】 Zynq平台网络芯片RTL8211FD配置资源推荐
Zynq平台网络芯片RTL8211FD配置资源推荐 【下载地址】Zynq使用网络芯片RTL8211FD资源文件 本仓库提供了一个用于Zynq平台使用网络芯片RTL8211FD的资源文件。由于Xilinx的源代码默认不支持RTL8211FD,本资源文件中的程序可以替代Xilinx的默认配置,使得Zynq…...
