您的位置 首页 golang

延迟的函数调用 golang

go有一个特殊的语句defer,可以安排一个函数,在本函数返回之前,再执行。

defer本身意思是 推迟,延迟。

看下面这个例子,defer了second这个函数,所以输出是现first,后second。

 package main
import "fmt"
func first() {
	fmt.Println("First")
}
func second() {
	fmt.Println("Second")
}
func main() {
	defer second()
	first()
}  

输出

 First
Second  

defer语句经常用于成对的操作,如 open和close, connect和disconnect, lock和unlock。

这可以确保资源被关闭。

正确的放置defer的位置是,在获取资源后,立即defer 关闭动作。

下面是一个例子,对比了使用了defer和没有使用defer的区别。

对于一个文件,打开后,读取,再关闭。

不使用defer时,会有很多重复的代码,去关闭资源。

 func ReadWrite() bool {
	file.Open("file")

	if failureX {
	file.Close()   //And here...
	return false
	}
	if failureY {
	file.Close()  //And here...
	return false
	}
	file.Close()  //And here...
	return true
}  

使用defer后,重写上面的代码,只写一次关闭。

 func ReadWrite() bool {
file.Open("file")
defer file.Close()   //file.Close() is added to defer list
// Do your thing
if failureX {
return false   // Close() is now done automatically
}

if failureY {
return false   // And here too
}

return true   // And here
}  

defer的优点

1,让Open和Close离得很近,便于理解

2,如果函数有多个return,defer会在他们之前执行

3,即使有runtime panic,defer的语句,也能确保执行。

如果defer了多个函数,是后进先出的。LIFO

文章来源:智云一二三科技

文章标题:延迟的函数调用 golang

文章地址:https://www.zhihuclub.com/99569.shtml

关于作者: 智云科技

热门文章

网站地图