Go基础学习记录 - Go指南 - 流程控制语句:defer

{app.params.name}}{app.params.name}}{app.params.name}}

环境

go version go1.10.1 darwin/amd64

defer语句

defer语句会将函数推迟到外层函数返回之后执行。推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。如下

package main

import "fmt"

func main() {
    defer fmt.Println("world")
    fmt.Println("hello")
}


运行后输出结果如下

hello
world

defer 栈

推迟的函数调用会被压入一个栈中。 当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。

更多关于 defer 语句的信息, 官方文博可以看下,后面会做一篇关于defer深入的用法,当前还是做基础入门了解。
defer栈的实例如下

package main

import "fmt"

func main() {
    fmt.Println("第一段")

    for i := 0; i < 10; i++ {
        defer fmt.Println("第二段", i)
    }

    fmt.Println("第三段")
}


运行结果如下,可以看出执行的顺序

第一段
第三段
第二段 9
第二段 8
第二段 7
第二段 6
第二段 5
第二段 4
第二段 3
第二段 2
第二段 1
第二段 0

 

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/14



版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/14