为了账号安全,请及时绑定邮箱和手机立即绑定

go中回调函数以及function types

标签:
Go

    参考了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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消