Golang笔记

理解golang defer 的使用

defer 是在函数退出前实行。另外需要注意的是函数的参数是值传递的。

看下面的例子:

package main

import "fmt"

func main() {
    var m int

    m = 10

    fmt.Println(m)
    defer Print(m)
    m = 20
}

func Print(m interface{}) {
    fmt.Println(m.(int))
}

输出的结果是:

10
10

如果要输出20 就用指针作为函数参数,代码改为:

package main

import "fmt"

func main() {
    var m *int

    m = new(int)
    *m = 10

    fmt.Println(*m)
    defer Print(m)
    *m = 20
}

func Print(m interface{}) {
    fmt.Println(*m.(*int))
}

输出:

10
20

也可以使用闭包函数更简单处理:

package main

import "fmt"

func main() {
    var m int

    m = 10

    fmt.Println(m)

    // 可以用闭包函数,跟了一个匿名函数,就是闭包了,闭包相当于把指针准备好了.
    defer func() {
        fmt.Println(m)
    }()

    m = 20
}

输出

10
20

用闭包还是指针,就看自己的需求了

本文网址: https://golangnote.com/topic/74.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。如果你有任何问题可以在下面 留言
Be the first to comment!
Captcha image
Relative Articles