前言
defer语句是在其所在函数返回后才被执行的。
然而,如果一个defer函数带有参数,那么这些参数是如何被取值的呢?
defer带参数取值-案例
下面的代码中为避免重复调用logStatus和incrementStatusCounter,我们会使用defer关键词:
type Status int ①
const (
StatusSuccess Status = iota
StatusRadiusFilterError
StatusActivityFilterError
)
func SearchDrivers(drivers []Driver) ([]Driver, error) {
var status Status
defer logStatus(status) ②
defer incrementStatusCounter(status) ③
var err error
drivers, err = applyRadiusFilter(drivers)
if err != nil {
status = StatusRadiusFilterError ④
return nil, err
}
drivers, err = applyActivityFilter(drivers)
if err != nil {
status = StatusActivityFilterError ⑤
return nil, err
}
status = StatusSuccess ⑥
return drivers, nil
}
① 定义一个Status类型枚举
② 延迟调用logStatus函数
③ 延迟调用 incrementStatusCounter函数
④ 设置status值为半径过滤错误</