defer关键字,压栈形式,先入后出,后入先出
示例1,main.go
package main
import "fmt"
func main() {
//写入defer关键字,压栈形式
defer fmt.Println("main end1")//先入后出
defer fmt.Println("main end2")//后入先出
fmt.Println("main::hello go 1")
fmt.Println("main::hello go 2")
}
知识点1:defer的执行顺序
package main
import "fmt"
/*
知识点1:defer的执行顺序
*/
func func1() {
fmt.Println("a")
}
func func2() {
fmt.Println("b")
}
func func3() {
fmt.Println("c")
}
func main() {
defer func1()
defer func2()
defer func3()
}
知识点二:defer在return谁先谁后
return之后的语句先执行,defer后的语句后执行
package main
import "fmt"
/*
知识点二:defer在return谁先谁后
return之后的语句先执行,defer后的语句后执行
*/
func deferFunc() int {
fmt.Println("defer func called...")
return 0
}
func returnFunc() int {
fmt.Println("return func called...")
return 0
}
func retrunAndDefer() int {
defer deferFunc()
return returnFunc()
}
func main() {
retrunAndDefer()
}