Gin学习记录2——路由

news2024/11/20 8:38:41

路由

  • 一. 常规路由
  • 二. 动态路由
  • 三. 带参数的路由
    • 3.1 GET
    • 3.2 POST
    • 3.3 绑定
  • 四. 简单的路由组
  • 五. 文件分组

一. 常规路由

package main

import (
	"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 string
	Num2 string
}

func main() {
	r := gin.Default()
	r.GET("/AddInt", func(ctx *gin.Context) {
		var num AddType
		if 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.gov2.go

package routers

import (
	"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 routers

import (
	"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)

在这里插入图片描述

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

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

相关文章

模板和STL简介

模板和STL简介 一、泛型编程1、通用交换函数的实现(1)代码(2)总结 2、泛型编程的概念3、模板的概念 二、函数模板1、概念2、格式3、代码4、原理 三、函数模板实例化1、概念2、隐式实例化(1)概念&#xff08…

传输层—TCP原理详解

目录 前言 1.TCP协议 2.TCP协议段格式 3.如何解包如何分用 4.网络协议栈和文件的关系 5.如何理解TCP报头 6.TCP的特点 7.TCP字段 7.1 16位窗口大小 7.2标志位 8.超时重传 9.连接管理机制 10.滑动窗口 11.拥塞控制 12.延迟应答 13.捎带应答 14.理解TCP的面向字…

【算法系列篇】分冶-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …

MYSQL调优之思路----sql语句和索引调优

MySQL数据库性能优化包括综合多方面因素,应根据实际的业务情况制定科学、合理的调优方案进行测试调优 文章目录 MySQL性能优化1 优化介绍1.2 优化要考虑的问题2.1 优化可能带来的问题2.2 优化的需求2.3 优化由谁参与2.4 优化的方向2.5 优化的维度 1.2数据库使用优化…

【SpringMVC】工作流程及入门案例

目录 前言 回顾MVC三层架构 1. SpringMVC简介 …

虹科资讯 | LyoPro 作为领先的冻干验证解决方案获得美国和欧洲两项官方专利!

获得美国和欧洲两项官方专利 我们非常高兴地宣布,虹科LyoPro冻干专用温度验证仪已在美国和欧洲获得两项官方专利,巩固了其作为市场上同类解决方案的唯一地位。有关LyoPro温度记录仪的专利分别是 US11340015B2 和 EP3742095B1,前者于2022年5月…

如何实现MongoDB数据的快速迁移?

作为一种Schema Free文档数据库,MongoDB因其灵活的数据模型,支撑业务快速迭代研发,广受开发者欢迎并被广泛使用。在企业使用MongoDB承载应用的过程中,会因为业务上云/跨云/下云/跨机房迁移/跨地域迁移、或数据库版本升级、数据库整…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_SPEED_OPTIMIZER

文章目录 前言PIECEWISE_JERK_SPEED_OPTIMIZER功能简介PIECEWISE_JERK_SPEED_OPTIMIZER相关配置PIECEWISE_JERK_SPEED_OPTIMIZER流程QP问题的标准类型定义:优化变量设计目标函数约束条件相关矩阵二次项系数矩阵 H H H一次项系数向量 q q q设定OSQP求解参数 Process设…

第二张微服务的调用与注册

文章目录 工程导入利用RestTemplate调用服务需求创建RestTemplate的实例到Spring容器使用RestTemplate发送请求消费者和提供者 Eureka注册中心服务远程调用会出现的问题Eureka的结构和作用Eureka的配置过程搭建注册中心服务注册服务发现 Ribbon负载均衡负载均衡原理源码跟踪总结…

windows server 2019 一键安装sqlserver2012

准备安装包和脚本 脚本代码 install.bat REM 自动判断权限问题,主动获取管理员权限 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if %errorlevel% NEQ 0 ( goto UACPrompt ) else ( go…

PPT 架构师三板斧

PPT 架构师三板斧 目录概述需求: 设计思路实现思路分析1.多节点上PPT 架构师三板斧2.几张框框组合有组织3.专业词汇4.切记点要点 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,ski…

使用Jekyll + GitHub Pages搭建个人博客

本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。 1.简介 Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用…

GeoServe Web管理界面远程访问GeoServe Web管理界面的最佳工具

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

网络编程 day 7

1、将.txt表数据导入数据库中 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)int main(int argc, const char *argv[]) {//以只读的方式打开dict.txt文件FILE* fd;if((fdfopen("./dict.txt&q…

C++多态案例2----制作饮品

#include<iostream> using namespace std;//制作饮品的大致流程都为&#xff1a; //煮水-----冲泡-----倒入杯中----加入辅料//本案例利用多态技术&#xff0c;提供抽象类制作饮品基类&#xff0c;提供子类制作茶叶和咖啡class AbstractDrinking {public://煮水//冲水//倒…

springboot整合elasticsearch使用案例

引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 添加注入 import org.apache.http.HttpHost; import org.elasticsearch.client.Res…

关于右值引用与完美转发

关于右值引用与完美转发 今日的疑问: 在下面的代码中,forwardFunction(n); // 为什么这里调用的是process(int&),而不是process(int&&)?解答:想要使用右值的方法有很多,如下: 今日的疑问: 在下面的代码中,forwardFunction(n); // 为什么这里调用的是process(int&a…

sql:SQL优化知识点记录(十)

&#xff08;1&#xff09;慢查询日志 Group by的优化跟Order by趋同&#xff0c;只是多了一个having 开启慢查询日志&#xff1a; 演示一下慢sql&#xff1a;4秒之后才会出结果 查看一下&#xff1a;下方显示慢查询的sql &#xff08;2&#xff09;批量插入数据脚本 函数和存…

大模型 Dalle2 学习三部曲(一)Latent Diffusion Models学习

引言 Diffusion model大获成功&#xff0c;但是它的短板也很明显&#xff0c;需要大量的计算资源&#xff0c;并且推理速度比较慢。如何才能提升Diffusion model的计算效率。业界有各种各样的改进&#xff0c;无疑Latent Diffusion Models&#xff08;潜在扩散模型&#xff0c;…

SpringMVC入门详细介绍

一. SpringMVC简介 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的几部分&#xff0c;简化开发&a…