首页 > 其他分享 >go学习03

go学习03

时间:2024-05-01 10:56:27浏览次数:19  
标签:03 param 学习 v1 func router go gin 日志

路由分组

	v1 := router.Group("/v1")
	{
		v1.POST("/login", loginEndpoint)
		v1.POST("/submit", submitEndpoint)
		v1.POST("/read", readEndpoint)
	}

	v2 := router.Group("/v2")
	{
		v2.POST("/login", loginEndpoint)
		v2.POST("/submit", submitEndpoint)
		v2.POST("/read", readEndpoint)
	}

自定义中间件

原理类似洋葱中间件

func middle1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middle1前")
		//与Next()相反的是Abort(),表示终止流程
		c.Next()
		fmt.Println("middle1后")
	}
}

func middle2() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("middle2前")
		c.Next()
		fmt.Println("middle2后")
	}
}

func main() {

	ginServer := gin.Default()
	//v1 := ginServer.Group("/v1").Use(middle1()).Use(middle2())
	v1 := ginServer.Group("/v1").Use(middle1(), middle2())
	{
		v1.POST("/login", func(c *gin.Context) {
			fmt.Println("中")
			c.JSON(200, gin.H{
				"message": "login success",
			})
		})
	}
	ginServer.Run(":8080")
}


实际项目中间件的使用场景有:身份验证和权限控制、日志记录、错误处理和恢复、请求处理时间统计、请求数据处理、路由控制、缓存处理和跨域资源共享

日志

写日志文件

func main() {
    // 禁用控制台颜色
    gin.DisableConsoleColor()

    // 创建记录日志的文件
    f, _ := os.Create("gin.log")
    gin.DefaultWriter = io.MultiWriter(f)

    // 如果需要将日志同时写入文件和控制台,请使用以下代码
    // gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.String(200, "pong")
    })

    router.Run(":8080")
}

自定义日志格式

func main() {
	router := gin.New()

	// LoggerWithFormatter 中间件会将日志写入 gin.DefaultWriter
	// By default gin.DefaultWriter = os.Stdout
	router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {

		// 你的自定义格式
		return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
				param.ClientIP,
				param.TimeStamp.Format(time.RFC1123),
				param.Method,
				param.Path,
				param.Request.Proto,
				param.StatusCode,
				param.Latency,
				param.Request.UserAgent(),
				param.ErrorMessage,
		)
	}))
	router.Use(gin.Recovery())

	router.GET("/ping", func(c *gin.Context) {
		c.String(200, "pong")
	})

	router.Run(":8080")
}

不推荐go自带的日志工具,推荐使用logrus或者是go-logging

标签:03,param,学习,v1,func,router,go,gin,日志
From: https://www.cnblogs.com/nltack/p/18169085

相关文章

  • 《Node.js+Vue.js+MangoDB全栈开发实战》已出版
    《Node.js+Vue.js+MangoDB全栈开发实战》随书源码下载地址:链接:https://pan.baidu.com/s/1DQYgPZLmtJCIuDXs8gub_w?pwd=1127提取码:1127课件下载地址:链接:https://pan.baidu.com/s/1M36y1xu-gIUidDxw38GlBg提取码:1988随书目录目   录第1章 Node.js和TypeScript基础·......
  • ' for reading (没有那个文件或目录)en file `
     001、奇怪的报错:'forreading(没有那个文件或目录)enfile`[sy20223040796@admin1test]$ls##测试文件及命令test.bedtest.sh[sy20223040796@admin1test]$cattest.bed##测试文件1540000154000021542500154250021......
  • mongodb创建索引和删除索引和背景索引background
    mongodb创建索引和删除索引和背景索引backgroundMongoDB的背景索引允许在后台创建和重建索引,而不会对数据库的正常操作产生影响。背景索引的创建过程是非阻塞的,可以在业务运行时创建或重建索引,而不会中断其他操作。这使得我们可以在生产环境中安全地创建和维护索引,而不必担心对数......
  • C. Theofanis' Nightmare
    链接:https://codeforces.com/problemset/problem/1903/C洛谷链接(有翻译):https://www.luogu.com.cn/problem/CF1903C解答:观察可知:如果后面连续的和大于等于0,那么后面就可以连成一段(贪心),就是说因为前面每加上一个数,后面的所有数出现的次数都会+1,那么只要后面的和大于等于0,就可以知......
  • Crypto学习笔记
    Crypto学习笔记(持续更新)数学是个看天赋的学科,而我恰好没有这个天赋,别人很容易理解的内容,我需要学习很久。本篇博客将记录我探索Crypto世界的点滴旅程,初衷是为了方便自己查阅,也便于自我成长与回顾,倘若笔者浅薄之见,能有幸为诸位师傅学问之海添一滴水,实乃蓬荜生辉,甚为喜悦。在此过......
  • 8086 汇编学习 Part 5
    流程转移背景一般情况下指令是顺序地逐条执行的,而在实际中,常需要改变程序的执行流程。转移指令可以控制CPU执行内存中某处代码的指令。可以修改IP,或同时修改CS和IP的指令。分类按转移行为分类段内转移:只修改IP(例如JMPAX)段间转移:同时修改CS和IP(例......
  • jenkins学习转载文本
    基于Docker容器DevOps应用方案企业业务代码发布系统一、企业业务代码发布方式1.1传统方式以物理机或虚拟机为颗粒度部署部署环境比较复杂,需要有先进的自动化运维手段出现问题后重新部署成本大,一般采用集群方式部署部署后以静态方式展现1.2容器化方式以容器为颗粒度......
  • 39.C语言数组学习的有关整理
    首先还是关于这两个东西sizeof()用于计算所占空间大小strlen()只用于求字符串长度/***sizeof计算所占空间大小\0也会计算*strlen只能用来求字符串长度直到找到字符串结束标志\0**/chararr1[]={'a','b','c'};//abcchararr2[]="abc";//abc\0......
  • 【pytorch学习】之多层感知机
    多层感知机1多层感知机最简单的深度网络称为多层感知机。多层感知机由多层神经元组成,每一层与它的上一层相连,从中接收输入;同时每一层也与它的下一层相连,影响当前层的神经元。当我们训练容量较大的模型时,我们面临着过拟合的风险。因此,将从基本的概念介绍开始讲起,包括过拟合、欠......
  • Django 笔记 - 特殊操作符
    Django是目前最流行的PythonWeb开源框架。相对于Python 日常编程,Django有一些特殊用法的操作符,这里简称为特殊操作符。下面简要介绍两种特殊操作符,即':'和'|'。操作符':' 在URL中,使用操作符‘:'表示带有命名空间的URL。例如,使用'admin:index'表示......