疑惑return后面的defer到底会不会执行?

taatcc · · 4193 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go package main import ( "fmt" ) var a bool = true func main() { defer func(){ fmt.Println("err1:") }() if a == true { fmt.Println("is true") return } defer func(){ fmt.Println("err2:") }() } ``` 输出: <pre> is true err1: 可见,return后面的defer没执行 在该网站看到一篇文章,说defer任何时候都会执行,如下: </pre> ```go https://studygolang.com/articles/22646 func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } defer src.Close() dst, err := os.Create(dstName) if err != nil { return } defer dst.Close() return io.Copy(dst, src) } src 和 dst 都能及时清理和释放,无论 return 在什么地方执行。 ``` <b>请问如果return后,defer src.Close()真的会执行吗?</b>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4193 次点击  ∙  2 赞  
加入收藏 微博
10 回复  |  直到 2019-09-07 11:42:19
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传