golang 中间件简单示例
示例代码
package main
import (
"fmt"
"strings"
)
// 定义一个函数类型,表示中间件
type Middleware func(string) string
// 中间件 1:将字符串转换为大写
func toUpperMiddleware(next Middleware) Middleware {
return func(s string) string {
s = strings.ToUpper(s) // 转换为大写
return next(s) // 调用下一个中间件或最终处理函数
}
}
// 中间件 2:在字符串前后添加装饰符号
func decorateMiddleware(next Middleware) Middleware {
return func(s string) string {
s = "===" + s + "===" // 添加装饰符号
return next(s) // 调用下一个中间件或最终处理函数
}
}
// 最终处理函数:直接返回字符串
func finalHandler(s string) string {
return s
}
func main() {
// 定义中间件链
handler := toUpperMiddleware(decorateMiddleware(finalHandler))
// 调用中间件链
result := handler("hello, middleware")
fmt.Println(result) // 输出: ===HELLO, MIDDLEWARE===
}
代码解释
-
Middleware
类型:- 这是一个函数类型,表示中间件。它接收一个字符串并返回一个字符串。
-
toUpperMiddleware
函数:- 这是一个中间件,它将输入的字符串转换为大写。
- 它接收一个
next
参数(下一个中间件或最终处理函数),并在处理后调用next
。
-
decorateMiddleware
函数:- 这是另一个中间件,它在字符串前后添加装饰符号
===
。 - 它同样接收一个
next
参数,并在处理后调用next
。
- 这是另一个中间件,它在字符串前后添加装饰符号
-
finalHandler
函数:- 这是最终的处理函数,它直接返回字符串。
-
中间件链:
- 通过将中间件嵌套调用,形成一个处理链:
toUpperMiddleware(decorateMiddleware(finalHandler))
。 - 调用时,数据会依次通过每个中间件,最后到达
finalHandler
。
- 通过将中间件嵌套调用,形成一个处理链:
-
运行结果:
- 输入字符串
"hello, middleware"
。 - 先经过
toUpperMiddleware
,转换为大写:"HELLO, MIDDLEWARE"
。 - 再经过
decorateMiddleware
,添加装饰符号:"===HELLO, MIDDLEWARE==="
。 - 最终输出:
===HELLO, MIDDLEWARE===
。
- 输入字符串
总结
中间件的核心思想是:将处理逻辑拆分为多个可复用的步骤,并通过链式调用的方式组合它们。这种方式非常适合处理需要多个步骤的任务,比如数据转换、日志记录、验证等。
Do not communicate by sharing memory; instead, share memory by communicating.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2024-02-27 设计模式--观察者(Observer)模式