深入理解 Go-Defer的机制
defer 的作用和执行时机go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return 之后,比如 func a() int { defer b() return 0}b 的执行是发生在return 0之后,注意defer 的语法,关键字defer之后是函数的调用。 defer 的重要用途一:清理释放资源由于defer 的延迟特性,defer常用在函数调用结束之后清理相关的资源,比如 f, _ := os.Open(filename)defer f.Close()文件资源的释放会在函数调用结束之后借助 defer 自动执行,不需要时刻记住哪里的资源需要释放,打开和释放必须相对应。 用一个例子深刻诠释一下defer带来的便利和简洁。 代码的主要目的是打开一个文件,然后复制内容到另一个新的文件中,没有defer时这样写: func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } d...