Golang Go语言中对标准库 http.Handler 进行泛型扩展

发布于 1周前 作者 nodeper 来自 Go语言

仿 spring 参数预处理

func( http.ResponseWriter, *http.Request, T) (R, error)	{
 //todo
}

https://github.com/otk-final/thf


Golang Go语言中对标准库 http.Handler 进行泛型扩展

更多关于Golang Go语言中对标准库 http.Handler 进行泛型扩展的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言中对标准库 http.Handler 进行泛型扩展的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,对标准库 http.Handler 进行泛型扩展并不是直接支持的操作,因为Go的泛型(自Go 1.18引入)主要用于函数和类型参数化,而 http.Handler 接口本身是一个相对固定的接口定义,用于处理HTTP请求。

不过,我们可以通过组合和抽象来模拟泛型行为,以适应不同的处理逻辑。一种常见的方法是定义一个泛型处理函数,该函数接受一个处理逻辑作为参数,并返回一个实现了 http.Handler 接口的类型。

例如:

package main

import (
    "fmt"
    "net/http"
)

// GenericHandler is a generic HTTP handler function.
type GenericHandler[T any] func(http.ResponseWriter, *http.Request, T)

// HandlerWrapper wraps a GenericHandler to implement http.Handler.
type HandlerWrapper[T any] struct {
    handler GenericHandler[T]
    data    T
}

func (h HandlerWrapper[T]) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    h.handler(w, r, h.data)
}

func main() {
    data := "Hello, World!"
    handler := func(w http.ResponseWriter, r *http.Request, msg string) {
        fmt.Fprintln(w, msg)
    }

    http.Handle("/", &HandlerWrapper[string]{handler: handler, data: data})
    http.ListenAndServe(":8080", nil)
}

在这个例子中,HandlerWrapper 类型将泛型处理函数和数据封装起来,实现了 http.Handler 接口。这种方式虽然不是真正的泛型扩展 http.Handler,但它提供了一种灵活的方式来处理不同的HTTP请求逻辑。

回到顶部