友情推广
defer
defer关键字,用于在函数调用结束之后,再去执行defer后边的函数。defer语法
defer 函数
下边来看一段例子:
package main
import "fmt"
func demo() int {
defer fmt.Println("函数调用结束之后,调用defer后边的函数")
fmt.Println("begin")
return 200
}
func main() {
fmt.Println(demo())
}
输出信息是:
begin
函数调用结束之后,调用defer后边的函数
200
在调用demo函数后,defer虽然在函数内第一行,但是却是最后被执行。defer关键字能够改变函数内代码执行顺序。如果在defer后想要调用多个函数,应该怎么办了?一种简单的实现方式是使用闭包:
package main
import "fmt"
func demo() int {
defer func() {
fmt.Println("func1")
fmt.Println("func2")
}()
fmt.Println("begin")
return 200
}
func main() {
fmt.Println(demo())
}
输出信息是:
begin
func1
func2
200
defer后边调用的函数如果有返回值,则这个返回值将会被丢弃。
package main
import "fmt"
func demo() int {
defer func() int {
return 100
}()
return 8
}
func main() {
fmt.Println(demo())
}
输出信息是:
8
上边的示例代码中,demo函数的返回值是8。 defer后边调用的函数的返回值并不能作为demo函数的返回值。