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(){ //做一些清理 }()