『go成长之路』 defer 作用、典型用法以及多个defer调用顺序,附加defer避坑点,拿来吧你
go defer 作用以及调用顺序
预习内容
- defer 的作用有哪些?
- 多个 defer 的执行顺序是怎样的?
- defer,return,函数返回值 三者之间的执行顺序
defer的作用
go中的defer
是延迟函数,一般是用于释放资源或者收尾工作。
由于defer
是具有延迟特性且执行动作是在函数return之后,因此作为资源释放作用再好不过。
- 典型例子:释放锁、关闭文件、关闭链接等
// 释放锁
func getValue() {
s.Lock()
defer s.Unlock()
...
}
// 关闭文件
func read() {
f, err := os.OpenFile("filename", os.O_RDWR, os.ModePerm)
defer f.Close()
...
}
// 关闭链接
func connect() {
resp, err := grequests.Get(s.cfg.GateApiCrossMarginUrl, nil)
defer resp.