0
從以下獲得:
包裝蛋糕接受:草莓蛋糕
包裝蛋糕接受:草莓蛋糕
包裝蛋糕接受:草莓蛋糕
包裝收到蛋糕:草莓蛋糕
我們完成了!
包裝收到蛋糕:草莓蛋糕
sync.WaitGroup - 爲什麼一氣呵成程序來後.wait()
我沒想到「我們完成了!」是第二最後?
package main
import (
"fmt"
// "strconv"
// "time"
"sync"
)
func makeCakeAndSend(cs chan string, wg *sync.WaitGroup) {
cakeName := "Strawberry Cake "
cs <- cakeName
wg.Done()
}
func receiveCakeAndPack(cs chan string) {
for s := range cs {
fmt.Println("Packing received cake: ", s)
}
}
func main() {
var wg sync.WaitGroup
cs := make(chan string)
wg.Add(5)
for i := 1; i <= 5; i++ {
go makeCakeAndSend(cs, &wg)
}
// go receiveCakeAndPack(cs)
go func() {
for s := range cs {
fmt.Println("Packing received cake: ", s)
}
close(cs)
}()
wg.Wait()
fmt.Println("We are done!")
var input string
fmt.Scanln(&input)
}
如果我需要從所有使用值走程序,然後再繼續 - 完成發送VS完成接收。你知道嗎? –
然後您可以在wg.Wait之後關閉頻道,並且接收循環將退出。 –
您也可以移動'wg.Done()':如果在將項目發佈到頻道時沒有完成,但實際處理完畢後,您應該在匿名頻道消費者中調用wg.Done()打印'收到蛋糕'後)。 – Guildencrantz