Go 延迟函数调用
例子
延迟函数调用的目的finally与Java等语言中的块类似:它们确保在外部函数返回时将执行某些函数,而不管是否发生错误或在多次返回的情况下命中哪个return语句。这对于清理必须关闭的资源(如网络连接或文件指针)很有用。该defer关键字表示递延函数调用时,同样go的关键字发起新的goroutine。与go调用一样,函数参数会立即求值,但与go调用不同的是,延迟函数不会并发执行。
func MyFunc() {
conn := GetConnection() //某种必须关闭的连接。
defer conn.Close() //无论如何,都会在MyFunc返回时执行。
//做一些事情...
if someCondition {
return //conn.Close()将被调用
}
//做更多的事情
}//隐式返回-conn.Close()仍将被调用注意使用而不是-你不仅仅是传入一个函数,你还推迟了一个完整的函数调用,包括它的参数。多个函数调用可以在同一个外部函数中延迟,并且每个调用都会以相反的顺序执行一次。你也可以推迟关闭——只是不要忘记括号!conn.Close()conn.Close
defer func(){
//做一些清理
}()