是否有可能defer结束外部功能?
// normal transaction
func dbStuff(){
db.Begin()
...
db.Commit()
}
// normal transaction w/ defer
func dbStuff(){
db.Begin()
defer db.Commit()
...
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
// 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
}
Run Code Online (Sandbox Code Playgroud)
小智 9
这可能会有所帮助。
func main() {
defer greet()()
fmt.Println("Some code here...")
}
func greet() func() {
fmt.Println("Hello!")
return func() { fmt.Println("Bye!") } // this will be deferred
}
Run Code Online (Sandbox Code Playgroud)
输出:
Hello!
Some code here...
Bye!
Run Code Online (Sandbox Code Playgroud)
参考: https: //asanchez.dev/blog/defer-golang-on-entry/
根据规范,这是不是可能:
"defer"语句调用一个函数,该函数的执行被推迟到周围函数返回的那一刻,因为周围的函数执行了一个return语句,到达了它的函数体的末尾,或者因为相应的goroutine是恐慌.
(强调我的)
更新:除此之外,它也不是一个好主意 - Go的优点之一是"你看到的就是你得到的".将函数从内部函数推迟到外部函数将在控件流中创建"隐形"更改.
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |