package main
import(
"fmt"
)
type A func (int,int)
func (this A) Serve() {
fmt.Println("function 1")
}
func Serve(int,int) {
fmt.Println("function 2")
}
func main() {
a := A(Serve)
a.Serve() // function 1
}
函数服务可以转换为类型A,这也是一个函数,但是,我只是不知道何时以及为什么我们应该使用这种方法,来处理我们应该转换函数的类型问题键入另一个?我的例子似乎毫无意义。
int,struct等是类型,从底层数据结构的角度来看,函数类型究竟与int和struct等常见的已知类型有什么不同?
非常感谢!
答案 0 :(得分:4)
确实有点令人困惑。我已经看到这种技术用于使普通函数与接口兼容,而无需创建结构的麻烦,并使该函数成为此结构的方法 - 或其他类似技术。
在标准的http库中可以找到一个很好的例子。你有类型
type HandlerFunc func(ResponseWriter, *Request)
它有方法:
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
这允许它用作http.Handler
接口,如下所示:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
这允许您在不使用默认http mux的情况下在普通函数上调用http.ListenAndServe
。将函数包装为http.Handler
可以创建一个" mux-less"服务器。
因此你可以这样做:
http.ListenAndServe(":8080",
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//la di da
})
)