go学习03

news/2024/10/15 18:30:44

路由分组

	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.Stdoutrouter.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

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

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

相关文章

推荐3款程序员常用的画图工具

前言 经常看到有小伙伴在DotNetGuide技术社区微信交流群里问:有什么好用的画图工具推荐的?今天大姚给大家推荐3款程序员日常工作中常用的画图工具,大家可以根据自己的需求选择。 ProcessOn ProcessOn是一款专业强大在线作图工具,提供AI生成思维导图流程图,支持思维导图、流…

kubernetes(k8s)

应用程序部署的演变过程 在部署应用程序的方式上,主要经历了三个时代传统部署互联网早期,会直接将应用程序部署在物理机上 优点: 简单,不需要其他技术的参与 缺点: 不能为应用程序定义资源使用边界,很难合理的分配计算资源,而且程序之间容易产生影响虚拟化部署可以在一台…

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步 @目录1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步每博一文案1.1 什么是 Bean 的生命周期1.2 Bean 的生命周期 "五步"1.3 Bean 的生命周期 “七步”1.4 Bean 的生命周期 …

mycat启动报错Could not reserve enough space for 2097152KB object heap

mycat启动报错: 报错1:Could not reserve enough space for 2097152KB object heap 找到wrapper.conf修改内存大小为1G # Initial Java Heap Size (in MB) #wrapper.java.initmemory=3 wrapper.java.initmemory=1024# Maximum Java Heap Size (in MB) #wrapper.java.maxmemor…

26-Spring源码分析(一)

1. Spring 架构设计 Spring 框架是一个分层架构,他包含一系列的功能要素,并被分为大约 20 个模块。1.1 设计理念 Spring 是面向 Bean 的编程(BOP:Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有…

缓存中的这7个坑,我把坑惨了!!!

前言 缓存在我们日常工作中,经常会使用,但如果用不好坑也挺多的。 这篇文章总结了我工作中使用缓存遇到过的7个坑,还是非常有参考价值得,希望对你会有所帮助。1 缓存穿透 大部分情况下,加缓存的目的是:为了减轻数据库的压力,提升系统的性能。 一般情况下,如果有用户请求…

10个使用NumPy就可以进行的图像处理步骤

图像处理是一种数学计算。数字图像由称为像素的彩色小点组成。每个像素由红、绿、蓝(RGB)三个独立的颜色组成。每个像素中的主色由每个RGB分量的数值决定。 本文将介绍10个使用使用NumPy就可以进行的图像处理步骤,虽然有更强大的图像处理库,但是这些简单的方法可以让我们更加…

TextMeshPro - 基本使用

1 选中字体文件(这边使用了华文行楷),然后创建Font Asset创建后会生成一个TMP用的字体资源 2,创建一个TextMeshPro的Text将字体资源设置为刚刚创建的那个,就可以开始使用了 3,粗体,斜体,下划线,删除线,文字颜色设置 4,字符间距,单词间距,行间距,段落间距的控制…