golang gin框架1——简单案例以及api版本控制

news2024/12/23 15:04:16

gin框架

gin是golang的一个后台WEB框架

简单案例

package main


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

func main() {
	r := gin.Default()

	r.GET("/ping", func(c *gin.Context) {
        //以json形式输出,还可以xml protobuf
		c.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})

	r.Run()  // listen and serve on 0.0.0.0:8080
}

上面代码是gin github 上的一个简单案例,Gin-Context 实现了对request和response的封装,是Gin的核心实现之一,学习使用gin框架就是学习使用Context包的过程。其内部封装了request 和response 过程中的数据

在这里插入图片描述

API以及版本控制

gin可以通过api分组的形式控制API版本

先看下面两组api

user.go

package user

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

func Add(c *gin.Context) {
	// 都是gin.context作为入参
	c.JSON(http.StatusOK, gin.H{
		"method": c.Request.Method,
		"path": c.Request.URL.Path,
	})
}

func Get(c *gin.Context) {
	// 都是gin.context作为入参
	c.JSON(http.StatusOK, gin.H{
		"method": c.Request.Method,
		"path": c.Request.URL.Path,
	})
}


user_v2.go

package user

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

func AddV2(c *gin.Context) {
	// 都是gin.context作为入参
	c.JSON(http.StatusOK, gin.H{
		"method": c.Request.Method,
		"path": c.Request.URL.Path,
	})
}

func GetV2(c *gin.Context) {
	// 都是gin.context作为入参
	c.JSON(http.StatusOK, gin.H{
		"method": c.Request.Method,
		"path": c.Request.URL.Path,
	})
}

路由初始化

package routers

import (
	"github.com/gin-gonic/gin"
	"goGin/user"
)
func InitRouters(r *gin.Engine) {
	//使用路由分组
	api := r.Group("api")
	initUser(api)
}
func initUser(group *gin.RouterGroup) {
	// 路由分组
	v1 := group.Group("/v1")
	{
		// /api/v1/course
		// 路径携带参数
		v1.GET("/user/:id", user.Get)
		v1.POST("/user/:id", user.Add)
	}

	// v2版本
	v2 := group.Group("v2")
	{
		v2.GET("/user/:id", user.GetV2)
		v2.POST("/user/:id", user.AddV2)
	}
}
package main


import (
	"github.com/gin-gonic/gin"
	"goGin/routers"
)

func main() {
	r := gin.Default()
	routers.InitRouters(r)
	r.Run(":8080")  // listen and serve on 0.0.0.0:8080
}

测试
在这里插入图片描述

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

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

相关文章

网络安全黑客究竟是什么?

“网络安全”是指任何活动旨在保护您的网络和数据的可用性和完整性。它包括硬件和软件技术。有效的网络安全管理对网络的访问。它针对的是一种不同的威胁,阻止他们进入或在您的网络传播。 网络安全是如何工作的呢? 网络安全结合多层防御的优势和网络。每个网络安全层实现政策…

前端TypeScript学习day01-TS介绍与TS常用类型

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持? TypeScript 相…

【Redis】基础数据结构-quicklist

Redis List 在Redis3.2版之前,Redis使用压缩列表和双向链表作为List的底层实现。当元素个数比较少并且元素长度比较小时,Redis使用压缩列表实现,否则Redis使用双向链表实现。 ziplist存在问题 不能保存过多的元素,否则查找复杂度…

vue-devtools插件安装

拓展程序连接 链接:https://pan.baidu.com/s/1tEyZJUCEK_PHPGhU_cu_MQ?pwdr2cj 提取码:r2cj 一、打开谷歌浏览器,点击扩展程序-管理扩展程序 二、打开开发者模式,将vue-devtools.crx 拖入页面,点击添加扩展程序 成…

三、【色彩模式与颜色填充】

文章目录 Photoshop常用的几种颜色模式包括:1. RGB模式2. CMYK模式3. 灰度模式4. LAB模式5. 多通道模式 Photoshop颜色填充1.色彩基础2.拾色器认识3.颜色填充最后附上流程图: Photoshop常用的几种颜色模式包括: 1. RGB模式 详细可参考&…

mysql-sql执行流程

sql执行流程 MYSQL 中的执行流程 MYSQL 中的执行流程 sql 执行流程如下图

【Qt基础篇】信号和槽

文章目录 一些常见的bug:字符集不对产生的错误VS平台中文乱码 QT的优点关于.pro文件QtCreator快捷键最简单的qt程序按钮的创建对象模型**Qt窗口坐标**体系信号和槽机制connect函数系统自带的信号和槽案例:实现点击按钮-关闭窗口的案例 自定义信号和槽案例…

AWD常见防御加固手段

目录 一、加固用户名密码(用户层) 1、修改linux用户密码 2、删除其他可登录用户 二、加固SQL数据库(服务层) 1、修改mysql密码 2、删除匿名用户 3、刷新配置 4、改网站后台密码 三、后门文件查杀 四、关闭shell连接进程 …

安装rockylinux 9.2 版本虚拟机

下载rockylinux镜像 方法1:官网下载rockyliunx 方法2:阿里云镜像站下载 因为网络问题,我这里选择阿里云镜像站下载 VMware 安装Rckyliunx9.2版本虚拟机 或者 安装向导页面

LLM评估标准有哪些?

为了有效衡量和优化LLM的性能和泛化能力,并揭示其优势和局限,建立合理的LLM评价基准具有重要意义。现阶段,主流的LLM评估方法可划分为3类: 1)人工评估。 基于人工的评估方法通常需要邀请大量的志愿者或相关领域专家对…

创意中秋与国庆贺卡 - 用代码为节日增添喜悦

目录 ​编辑 引言 贺卡的初始主题 - 中秋节 点击头像,切换至国庆主题 文本动画 用代码制作这个贺卡 获取完整代码(简单免费) 总结 引言 中秋佳节和国庆日是中国两个重要的传统节日,一个寓意团圆与祝福,另一个…

全网唯一!Matlab王者荣耀配色包MHonor

前些日子在家整理文档,偶然发现自己一年前建的一个工程,其大概内容是从王者荣耀一些角色皮肤的原画中提取配色方案,从而用于PPT制作、论文插图绘制等,为枯燥的科研生活增添点儿乐趣。 但是,由于自己当时的技术力还不够…

不讲故事的设计模式-责任链模式

文章目录 基本概念责任链模式标准结构责任链模式的扩展仿照Servlet Filter的实现方式 责任链模式的应用场景业务场景开源框架中的应用 责任链模式的缺点关于设计模式乱用的现象 基本概念 在责任链模式中可以定义多个处理节点(Handler),当接收…

【从0开始配置前后端项目】——Docker环境配置

1. 准备一台纯净的服务器 镜像:CentOS 7.9 64位 CPU & 内存:2核2G 系统盘:60GB 峰值带宽:30Mbps 流量包:600GB / 600GB 2. 安装Docker 2.1 卸载旧的版本 $ sudo yum remove docker \docker-client \docker-cl…

芯片不是st公司,cmsis-dap调试器的使用

存在的问题: 分析:因为这块板子不是我们自己画的,也没细看芯片上的丝印,一开始我还以为芯片是盗版的,然后有人看到了丝印的前缀是GD,我们就意识到可能是芯片包没装对的问题了解决方法: &#xf…

互联网Java工程师面试题·Memcached篇·第一弹

目录 1、Memcached 是什么,有什么作用? 1.1 memcached 服务在企业集群架构中有哪些应用场景? 1.1.1 作为数据库的前端缓存应用 1.1.2 作业集群的 session 会话共享存储 2、Memcached 服务分布式集群如何实现? 3、Memcach…

【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)

目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、归并排序思想 2.2.1、画图详细讲解 2.2.2、归并排序解决逆序对的代码实现 1、题目介绍 首先阅读题目可以得出要点,即当前数大于后数时则当作一个【逆序对】,而题目是要求在一个数组中计算一共存…

专业综合课程设计 - 优阅书城项目(第一版)

此项目是《专业综合课程设计》带练项目 实现的功能有: 登录、注销、添加图书、删除图书、编辑图书 包含资源: 优阅书城(bookstore)源码 数据库数据 课程笔记 下载链接:https://wwpv.lanzoue.com/i79nx1av4doj 登录功…

小谈设计模式(20)—组合模式

小谈设计模式(20)—组合模式 专栏介绍专栏地址专栏介绍 组合模式对象类型叶节点组合节点 核心思想应用场景123 结构图结构图分析 Java语言实现首先,我们需要定义一个抽象的组件类 Component,它包含了组合节点和叶节点的公共操作&a…

两数之和(Hash表)[简单]

优质博文:IT-BLOG-CN 一、题目 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出"和"为目标值target的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元…