golang-closure

defer&goroutine

·

1 min read

golang

闭包

defer

// 这里使用函数调用栈去理解,defer 压栈,函数返回时出栈

// 直接调用: 变量值的快照
defer fmt.Println(val) :100

// 闭包调用: 传变量
 defer func(){ 
    fmt.Println(val) :var
}()

goroutine

// 这里异步闭包打印异常
// 这里for循环起10个goroutine,因为传的是变量,
// k,v的更新速度大于,goroutine打印速度,所以会打印相同值
// 1.创建一个协程后sleep一段时间会正常输出
// 2.使用slice 输出会趋于末尾值

    var aMap = make(map[int]int, 10)
    for i := 1; i <= 10; i++ {
        aMap[i] = i
    }
    for k, v := range aMap {
        go func() {
            fmt.Println(k, " ->>>>", v)
        }()
    }