责任链模式在Go中通过接口定义处理器、链式组装和延迟执行自然实现,核心是每个处理器自主决定是否处理请求及是否传递给下一个处理器;所有处理器实现统一Handler接口,结构体持有next引用,支持拦截与透传,可配合函数式构造器提升链式构建体验。

责任链模式在 Go 中可以通过接口定义处理器、链式组装和延迟执行来自然实现,核心是让每个处理器决定是否处理请求,以及是否将请求传递给下一个处理器。
所有处理器都实现同一个接口,确保链中任意环节可被替换或扩展:
type Handler interface {
Handle(request interface{}) (interface{}, error)
}该接口接收任意请求,返回响应或错误。不强制要求每个处理器都必须调用下一个——是否传递由当前处理器逻辑决定,这是责任链的关键灵活性。
用结构体包装具体逻辑,并持有下一个处理器引用(可为空):
立即学习“go语言免费学习笔记(深入)”;
type AuthHandler struct {
next Handler
}
func (h *AuthHandler) Handle(request interface{}) (interface{}, error) {
// 假设 request 是 map[string]interface{}
if token, ok := request.(map[string]interface{})["token"]; !ok || token == nil {
return nil, fmt.Errorf("missing auth token")
}
// 验证通过,继续传递
if h.next != nil {
return h.next.Handle(request)
}
return "auth passed", nil
}
func (h *AuthHandler) SetNext(next Handler) {
h.next = next
}类似地可实现 RateLimitHandler、ValidationHandler 等,每个只关注单一职责。
按需串联处理器,顺序即执行顺序:
auth := &AuthHandler{}
rate := &RateLimitHandler{}
valid := &ValidationHandler{}
log := &LoggingHandler{}
// 从头到尾链接
auth.SetNext(rate)
rate.SetNext(valid)
valid.SetNext(log)
// 启动链式处理
resp, err := auth.Handle(map[string]interface{}{
"token": "abc123",
"data": "hello",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(resp) // 输出最终响应避免手动 SetNext,改用链式构造语法,更符合 Go 的简洁风格:
type Chain struct {
first Handler
}
func NewChain(h Handler) *Chain {
return &Chain{first: h}
}
func (c *Chain) Then(h Handler) *Chain {
if c.first != nil {
// 递归找到末尾并链接
last := c.findLast(c.first)
last.SetNext(h)
}
return c
}
func (c *Chain) findLast(h Handler) Handler {
if nexter, ok := h.(interface{ GetNext() Handler }); ok {
if n := nexter.GetNext(); n != nil {
return c.findLast(n)
}
}
return h
}
// 使用方式
chain := NewChain(&AuthHandler{}).
Then(&RateLimitHandler{}).
Then(&ValidationHandler{}).
Then(&LoggingHandler{})
resp, err := chain.first.Handle(req)也可进一步封装为 Run(request) 方法,隐藏 first 调用细节,使 API 更干净。
以上就是如何使用Golang实现责任链模式_处理请求的链式传递的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号