go学习03
路由分组
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理