Defer func() 与 log.Falt()

在Go程序设计中看到如下代码


//Some code to create network link to server ...

func main() {
   con, err := net.Dial("tcp","host to server")
   if err != nil {
        log.Fatal(err)
    }
   defer con.Close()
   mustCopy(os.Stdout,con)
}

func mustCopy(dst io.Writer,src io.Reader) {
        if _,err := io.Copy(dst,src); err != nil {
               log.Fatal(err)
        }
}

现在我的疑问是 如果 在mustCopy中产生err执行log.Fatal(err)后, main的中defer 语句还会执行吗(log.Fatal(err)调用了os.Exit(0))? 如果执行了;有什么方法可以捕捉到那条语句的确执行了? 感谢在先.

做了如下测试,终端却没有打印..... 也打了断点发现程序直接退出.

func main() {
    defer fmt.Println("Main Code")
    subRoting()
}
func subRoting() {
    log.Fatal("")
}
阅读 2.3k
1 个回答

先回答问题:不执行了,你下面的测试程序也说明了这一点。

defer 的作用是在函数退出之前执行所 defer 的函数,当执行 log.Fatal 的时候直接程序就退出了,你那个 main 函数就没有执行到最后,肯定就不会执行所 defer 的函数啦

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题