1.定义

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

2.机制

定义一个回调函数

提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者

当特定的事件或条件发生时,调用者使用函数指针调用回调函数对事件进行处理

例1.这是一个简单的回调例子,调用函数test时,调用真正的实现函数add

package main

import "fmt"

type Callback func(x, y int) int

// 提供一个接口,让外部去实现

func test(x, y int, callback Callback) int {

return callback(x, y)

}

// 回调函数的具体实现

func add(x, y int) int {

return x + y

}

func main() {

x, y := 1, 2

fmt.Println(test(x, y, add))

}

例2.这是一个将字符串转为Int的例子,在转换失败的情况下执行回调函数,输出错误信息

package main

import (

"strconv"

"fmt"

)

type Callback func(msg string)

//将字符串转换为int64,如果转换失败调用Callback

func stringToInt(s string, callback Callback) int64 {

if value, err := strconv.ParseInt(s, 0, 0); err != nil {

callback(err.Error())

return 0

} else {

return value

}

}

// 记录日志消息的具体实现

func errLog(msg string) {

fmt.Println("Convert error: ", msg)

}

func main() {

fmt.Println(stringToInt("18", errLog))

fmt.Println(stringToInt("hh", errLog))

}

通过上面的两个简单例子,相信机智的你已经了解Golang的回调机智咯~

有疑问加站长微信联系(非本文作者)