go中如何编写函数?

use*_*934 3 go

我正在尝试弄清楚如何设置中间件,现在我得到了类似的东西:

func applyMiddleware(h *Handle) *Handle {
   return a(b(c(h)))
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以“组合”这些函数,以便我只需传递句柄列表即可返回组合函数?

小智 7

使用切片

https://play.golang.org/p/DrEnGkIEbU3

package main

import (
    "fmt"
)

func main() {
    fmt.Println(v(v(v(0))))
    fmt.Println(compose(v, v, v)(0))
}
func v(i int) int {
    return i + 1
}
func compose(manyv ...func(int) int) func(int) int {
    return func(i int) int {
        for _, v := range manyv {
            i = v(i)
        }
        return i
    }
}
Run Code Online (Sandbox Code Playgroud)