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===
}

代码解释

  1. Middleware 类型

    • 这是一个函数类型,表示中间件。它接收一个字符串并返回一个字符串。
  2. toUpperMiddleware 函数

    • 这是一个中间件,它将输入的字符串转换为大写。
    • 它接收一个 next 参数(下一个中间件或最终处理函数),并在处理后调用 next
  3. decorateMiddleware 函数

    • 这是另一个中间件,它在字符串前后添加装饰符号 ===
    • 它同样接收一个 next 参数,并在处理后调用 next
  4. finalHandler 函数

    • 这是最终的处理函数,它直接返回字符串。
  5. 中间件链

    • 通过将中间件嵌套调用,形成一个处理链:toUpperMiddleware(decorateMiddleware(finalHandler))
    • 调用时,数据会依次通过每个中间件,最后到达 finalHandler
  6. 运行结果

    • 输入字符串 "hello, middleware"
    • 先经过 toUpperMiddleware,转换为大写:"HELLO, MIDDLEWARE"
    • 再经过 decorateMiddleware,添加装饰符号:"===HELLO, MIDDLEWARE==="
    • 最终输出:===HELLO, MIDDLEWARE===

总结

中间件的核心思想是:将处理逻辑拆分为多个可复用的步骤,并通过链式调用的方式组合它们。这种方式非常适合处理需要多个步骤的任务,比如数据转换、日志记录、验证等。

posted @   guanyubo  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2024-02-27 设计模式--观察者(Observer)模式
点击右上角即可分享
微信分享提示