gpt4 book ai didi

go - 将自定义中间件类型传递给alice.New()函数时,构建失败

转载 作者:行者123 更新时间:2023-12-01 20:26:55 25 4
gpt4 key购买 nike

这是关于尝试构建应用程序时遇到的错误。

我使用Gorilla mux作为路由器,并使用Alice链接中间件。

我定义了一个带有以下签名的自定义类型“Middleware”;

type Middleware func(http.Handler) http.Handler

以下是使用Alice将中间件和处理程序链接在一起的代码。
if len(config.Middlewares()) > 0 {
subRouter.Handle(config.Path(), alice.New(config.Middlewares()...).Then(config.Handler())).Methods(config.Methods()...).Schemes(config.Schemes()...)
}

但是,当我尝试构建时,在控制台中出现以下错误;
infrastructure/router.go:88:63: cannot use config.Middlewares() (type []Middleware) as type []alice.Constructor in argument to alice.New

我检查了alice.Constructor的代码。它也与我的中间件类型具有相同的签名。

我正在使用 Go 1.13 和以下版本的Alice。
github.com/justinas/alice v1.2.0

你能帮我解决这个问题吗?

最佳答案

alice.Constructor具有相同的签名,但被定义为另一种类型。因此,您不能只使用它。

观看此https://www.youtube.com/watch?v=Vg603e9C-Vg
它有一个很好的解释。

您可以使用type aliases像这样:

var Middleware = alice.Constructor

将如下所示:

之前:

func timeoutHandler(h http.Handler) http.Handler {
return http.TimeoutHandler(h, 1*time.Second, "timed out")
}

func myApp(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello world!"))
}

type Middleware func(http.Handler) http.Handler

func main() {
middlewares := []Middleware{timeoutHandler}

http.Handle("/", alice.New(middlewares...).ThenFunc(myApp))
}


之后:
func timeoutHandler(h http.Handler) http.Handler {
return http.TimeoutHandler(h, 1*time.Second, "timed out")
}

func myApp(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello world!"))
}

type Middleware = alice.Constructor

func main() {
middlewares := []Middleware{timeoutHandler}

http.Handle("/", alice.New(middlewares...).ThenFunc(myApp))
}

关于go - 将自定义中间件类型传递给alice.New()函数时,构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com