Golang Go语言中对标准库 http.Handler 进行泛型扩展
仿 spring 参数预处理
func( http.ResponseWriter, *http.Request, T) (R, error) {
//todo
}
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请求逻辑。