参考了https://www.jianshu.com/p/fc4902159cf5的内容。
首先回调函数是啥?从golang的官方文档得知function types的解释是这样的。
A function type denotes the set of all functions with the same parameter and result types.
相同参数和相同返回值的函数集合
我对回调函数的理解:就是把一个函数类型和函数类型的参数作为参数的函数…简单来说就是一个拼接。
而function types 我仿佛看到了原形的影子。但是go语言是没有原形的。所以是一个接口?
给个例子吧
package main
import "fmt"
// Greeting function types
type Greeting func(name string) string
func say(g Greeting, n string) {
fmt.Println(g(n))
}
func english(name string) string {
return "Hello, " + name
}
func main() {
say(english, "World")
}
Greeting 函数类型,我们知道一个字符串参数,一个字符串返回值。然后当做say的参数。而say的另一个参数,就是g的参数。。。就是说,say()函数把g()函数的调用加参数都算上了。
package main
import "fmt"
// Greeting function types
type Greeting func(name string) string
func (g Greeting) say(n string) {
fmt.Println(g(n))
}
func english(name string) string {
return "Hello, " + name
}
func french(name string) string {
return "Bonjour, " + name
}
func main() {
g := Greeting(english)
g.say("World")
g = Greeting(french)
g.say("World")
}
上面这段程序更屌,给了这个greeting函数类型一个方法(int都能有方法,什么不行呢),这个方法就是给这个函数类型的实例传一个参数…这也算是回调?
最后一个,也是引起我疑惑的一个函数(Martini库里的)
type HandlerFunc func(ResponseWriter, *Request)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
形式上一样的, HandlerFunc类型函数的方法ServeHTTP可以给他两个参数,并且调用他。
作者:必须赶紧
链接:https://www.jianshu.com/p/225d522f272f