首页 > 其他分享 >Go模仿gin自定义中间件

Go模仿gin自定义中间件

时间:2024-02-18 16:13:20浏览次数:29  
标签:http 自定义 fmt req 中间件 HandlerFunc func Go

package main

import (
	"fmt"
	"net/http"
)

// 中间件函数类型
type MiddlewareFunc func(http.HandlerFunc) http.HandlerFunc

// 自定义中间件1
func LoggerMiddleware(next http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, req *http.Request) {
		fmt.Println("Logging:", req.Method, req.URL.Path)
		next(w, req)
	}
}

// 自定义中间件2
func LoggerMiddleware2(next http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, req *http.Request) {
		fmt.Println("Logging2:", req.Method, req.URL.Path)
		next(w, req)
	}
}

// 使用中间件
func UseMiddleware(handler http.HandlerFunc, middleware ...MiddlewareFunc) http.HandlerFunc {
	for i := len(middleware) - 1; i >= 0; i-- {
		handler = middleware[i](handler)
	}
	return handler
}

// 处理请求的处理程序
func myHandler(w http.ResponseWriter, req *http.Request) {
	fmt.Println("do handler")
	w.Write([]byte("Hello, World!"))
}

func main() {
	// 创建一个个中间件处理程序
	handlerWithMiddleware := UseMiddleware(myHandler, LoggerMiddleware, LoggerMiddleware2)

	http.HandleFunc("/", handlerWithMiddleware)

	fmt.Println("Server is running on localhost:8080")
	http.ListenAndServe(":8080", nil)
}

标签:http,自定义,fmt,req,中间件,HandlerFunc,func,Go
From: https://www.cnblogs.com/qcy-blog/p/18019457

相关文章

  • Go-embed把静态文件打包到二进制
    同级目录建立view文件夹。packagemainimport( "bytes" "embed" "encoding/json" "fmt" "github.com/gin-gonic/gin" "html/template" "io/ioutil" "net/http")const( gptUrl......
  • java自定义中文排序比较器
    1、先看看排序结果 2、自定义中文比较器//Comparator<String[]>中String[]表示的是每一行数据classStringArrayComparatorimplementsComparator<String[]>{privatefinalList<SortDTO>sortDTOList;//排序信息集合privatefinalCollatorcollator=Coll......
  • go1.22的一些关键改动
    参考汇总文章Go1.22正式发布!包含语言变化、性能提高、标准库变动等重要特性在电脑中安装多个版本的golang由于我的电脑安装的是go的1.21版本,1.22版本改动很大,如果工作中部署的项目dockerFile中指定的镜像的go版本比1.22低的话,有一些语法会编译不通过,所以我在官方下载了.gz格式......
  • ls -l 第一位 文件类型 gokcehan/lf 颜色
    SymbolFileType–regularfileddirectorylsymboliclinkpnamedpipeccharacterdevice, e.g.,/dev/tty1bblockdevice, e.g.,/dev/sda2ssocket  默认lf颜色主要取自GNUdircolors默认值。这些默认值使用8种基本颜色和粗......
  • 分布式系统---关键技术“消息中间件”
    消息中间件是一种用于构建分布式系统的软件基础设施,提供了一种异步的,可靠的,可伸缩的消息传递机制。 提高系统性能首先考虑的是数据库的优化,但是数据库因为历史原因,横向扩展是一件非常复杂的工程,所有我们一般会尽量把流量都挡在数据库之前。不管是无限的横向扩展服务器,还是纵向......
  • 基于python+django+mysql的小区物业管理系统
    该系统是基于python+django开发的小区物业管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。主要功能有:业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。演示地址http://wuye.gitapp.cn/admin后......
  • Gorm与数据库
    本篇是对上一篇博客的继续补充(当然也可以视作独立的一篇)。友情提示,本篇博客中用到了数据库可视化工具Navicat。另外,本篇博客的所有代码都可以从这里获取。建立大致项目结构Gorm是一个可以操作数据库的框架。为了更方便观察对数据库的操作,我们先建立一个基础从项目结构:只有一个......
  • Go语言指南练习:图像
    题目:还记得之前编写的图片生成器吗?我们再来编写另外一个,不过这次它将会返回一个image.Image的实现而非一个数据切片。定义你自己的Image类型,实现必要的方法并调用pic.ShowImage。Bounds应当返回一个image.Rectangle,例如image.Rect(0,0,w,h)。ColorModel应当返回color.RGBAM......
  • Asp.Net Core访问阿里云MongoDB云数据库
    Asp.NetCore访问阿里云MongoDB云数据库选择.NetCore技术栈开发跨平台软件解决方案,投入少,产出快,有助于企业内部降本增效。MongoDB的实体类增加字段不用迁移数据库,适合需求经常变化的应用场景。如果是企业内部小型应用,拉一个MongoDB容器即可,如果要进一步考虑多节点冗余,高可用,异地......
  • 创新技巧|迁移到 Google Analytics 4 时如何保存历史 Universal Analytics 数据
    GoogleUniversalAnalytics从2023年7月起停止收集数据(除了付费GA360之外)。它被GoogleAnalytics4取代。为此,不少用户疑惑:是否可以将累积(历史)数据从GoogleAnalyticsUniversal传输到GoogleAnalytics4?您无法将数据传输到新的GA4界面。但您可以将数据保存在Goog......