是否有可能defer
到外部函数的末尾?
// normal transaction
func dbStuff(){
db.Begin()
...
db.Commit()
}
// normal transaction w/ defer
func dbStuff(){
db.Begin()
defer db.Commit()
...
}
这可能吗?
// can you defer to caller / outer function?
func dbStuff(){
db.Trans()
...
}
// will Commit() when dbStuff() returns
func (db Db) Trans(){
db.Begin()
defer db.Commit() // to caller/outer function
}
答案 0 :(得分:5)
根据规范,它不可能:
A"推迟"语句调用一个函数,其执行延迟到周围函数返回的时刻,因为周围的函数执行了一个return语句,到达了它的函数体的末尾,或者因为相应的goroutine是恐慌。
(强调我的)
更新:除此之外,它也不是一个好主意 - Go的优势之一就是"你看到的就是你得到的东西"。将函数从内部函数推迟到外部函数将创建“隐形”函数。控制流程的变化。