go中回调函数以及function types

发布于 2018-04-23 作者 超级苦工 210次 浏览 版块 分享

    参考了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可以给他两个参数,并且调用他。

收藏
暂无回复