幾天前在 Golang Taiwan 的 slack 裡看到了一些關於 goroutine 的討論 有人問了以下程式碼 (from http://blog.mergermarket.it/now-youre-thinking-with-channels/) package main import "fmt" func main() { channelForInts := make(chan int) go printIntFromChannel(channelForInts) channelForInts <- 5 } func printIntFromChannel(channel chan int) { number := <-channel fmt.Println("The number is:", number) } 提到上述程式碼在 goplayground 上測試好幾次都會印出 The number is:5 但他自己在本機跑是怎樣執行都不會出現 5 看到這個問題第一個想到的是 sync.Waitgroup 之前剛開始學 goroutine 的概念時,就在 stackoverflow 上看到有人討論相關的議題 加個 sync.Waitgroup 就可以保證看到 goroutine 執行完後的結果。 而事實上會這樣子的原因 Go Programming Language Specification 有寫 Program execution begins by initializing the main package and then invoking the function main.

Continue reading

Author's picture

kerkerj

Cat lover <3

Backend Engineer

Taiwan