go的defer的使用

 基础语法  2021-02-14  admin  63  85

1.defer延迟调用,main函数结束前调用

func main() {
   //defer延迟调用,main函数结束前调用
   defer fmt.Println("bbbbbbbbbbbbb")

   fmt.Println("aaaaaaaaaaaaaaa")
}
aaaaaaaaaaaaaaa
bbbbbbbbbbbbb

2.多个defer的执行顺序

package main //必须

import "fmt"

func test(x int) {
	result := 100 / x

	fmt.Println("result = ", result)
}

func main() {

	defer fmt.Println("aaaaaaaaaaaaaa")

	defer fmt.Println("bbbbbbbbbbbbbb")

	//调用一个函数,导致内存出问题
	defer test(0)

	defer fmt.Println("ccccccccccccccc")
}

x=0

ccccccccccccccc
bbbbbbbbbbbbbb
aaaaaaaaaaaaaa
panic: runtime error: integer divide by zero

goroutine 1 [running]:
main.test(0x0)

x非零

ccccccccccccccc
result =  100
bbbbbbbbbbbbbb
aaaaaaaaaaaaaa

3.defer和匿名函数结合使用

package main //必须

import "fmt"

func main02() {
	a := 10
	b := 20

	//	defer func(a, b int) {
	//		fmt.Printf("a = %d, b = %d\n", a, b)
	//	}(a, b) //()代表调用此匿名函数, 把参数传递过去,已经先传递参数,只是没有调用

	defer func(a, b int) {
		fmt.Printf("a = %d, b = %d\n", a, b)
	}(10, 20) //()代表调用此匿名函数, 把参数传递过去,已经先传递参数,只是没有调用

	a = 111
	b = 222
	fmt.Printf("外部:a = %d, b = %d\n", a, b)
}

func main() {
	a := 10
	b := 20

	defer func() {
		fmt.Printf("a = %d, b = %d\n", a, b)
	}() //()代表调用此匿名函数

	a = 111
	b = 222
	fmt.Printf("外部:a = %d, b = %d\n", a, b)
}


转载必须注明出处:

go的defer的使用 —— centhp.com

相关推荐


go读取文件内容

go读取文件内容