defer是Golang的一个重要的关键字。defer在其所在的函数/方法运行结束时,才开始运行。
例子一,defer在其所在的main函数执行结束时,才开始执行,如下,
package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") }运行结果,
hello world例子二,defer在其所在的main函数执行结束时,才开始执行,如下,
package main import "fmt" func main() { defer fmt.Println("world") panic("main stop here...") fmt.Println("hello") }运行结果,
world panic: main stop here...通过前面的例子,知道defer在其所在的main函数执行结束时,才开始执行。
下面这个例子,要说明:defer在执行时,采用后来者先执行(last-in-first-out后来居上)的执行方式,如下,
package main import "fmt" func main() { for i := 1; i <= 3; i++ { defer fmt.Println(i) } }运行结果,
3 2 1下面例子,main执行完毕后,通过defer释放文件句柄,如下,
package main import ( "log" "os" ) func main() { f, err := os.Open("data.txt") if err != nil{ log.Printf("fail to open the file") return } defer f.Close() buffer := make([]byte, 4) nbytes, err := f.Read(buffer) log.Printf("%d bytes: %s\n", nbytes, string(buffer[:nbytes])) }运行结果,
4 bytes: data[1. defer的用法] https://yourbasic.org/golang/defer/
[备注一] 初稿,2019年07月18号。
