回调函数就是一个通过函数指针调用的函数。【真正的函数实现】
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。【被传递的那个函数】
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。【调用方是其他函数,不是实现方。】

type A struct{
  func f1() int{
    return 0
  }
}

type Callback func() int

type B struct{
}

func (b *B) f2(f1 Callback){
    f1() //形参:这里可以直接调用函数,而不用再重新创建A的对象,再通过a.f1()调用了!
}

func main(){
  B b:=B{}
  A a:=A{}
  b.f2(a.f1) //实参:但实参传入的是a.f1(),仍然需要传递a进去的!
}


/*
回调,相当于,把传统写法的传递对象,变成了传递函数,把函数的类型、函数的实现(包括其所在的结构体类型)拆开了。

回调时,在写B.f2()时,不需要确定A的类型,只需要确定A.f1()的类型就行。
而传统写法是,早在写B.f2时,就要确定A的类型。
*/
————————————————————
// 不用回调:传统写法
func  (b *B) f2(a A){
  a.f1()
}

参考:
https://studygolang.com/articles/10488

posted on 2023-04-21 11:42  西伯尔  阅读(40)  评论(0)    收藏  举报