Go语言示例 --19关于defer的使用

it2022-05-05  142

1. 关于Golang defer

defer是Golang的一个重要的关键字。defer在其所在的函数/方法运行结束时,才开始运行。

1.1. example 1: helloworld

例子一,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...

1.2. example 2: defer内部执行次序

通过前面的例子,知道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

1.3. example 3: defer的常见用于资源释放

下面例子,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号。


最新回复(0)