Closure

var i int 這個 local variable 被此 goroutine給 hold 住 https://go.dev/play/p/-Z2EYqFPJ4O

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    incr := func(wg *sync.WaitGroup) {
        var i int
        wg.Add(1)
        go func() {
            defer wg.Done()
            i++
            fmt.Printf("value of i: %v\n", i)
        }()
        fmt.Println("return from function")
        return
    }

    incr(&wg)
    wg.Wait()
    fmt.Println("done..")
}
return from function
value of i: 1
done..

Example2

Problem

https://go.dev/play/p/5XsP0XI9JNB

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    // what is the output
    //TODO: fix the issue.

    for i := 1; i <= 3; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            fmt.Println(i)
        }()
    }
    wg.Wait()
}

Solution

https://go.dev/play/p/YMsCI_sIcxJ

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    // what is the output
    // fix the issue.

    for i := 1; i <= 3; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Println(i)
        }(i)
    }
    wg.Wait()
}
© Kimi Tsai all right reserved.            Updated : 2023-07-12 09:04:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""