A Tour of GoのChannelsについての質問です。
デフォルトのコードを実行すると
-5 17 12
という出力結果が得られるのですが、channelに返される順番としてなぜこの順番になるのでしょうか?配列の前半を引数として実行した関数が最初に処理されて、先に書いたxの方に結果が渡ると思ったのですが、結果は予想と逆でした。
また、次のようにコードを改変して実行したら、
4 9 -1 12
という出力になりました。channelはスタックになっているのかと思ったのですが、そうではありませんでした。channelが返される順番はどのように決定されるのでしょうか。
Go
1package main 2 3import "fmt" 4 5func sum(s []int, c chan int) { 6 sum := 0 7 for _, v := range s { 8 sum += v 9 } 10 c <- sum // send sum to c 11} 12 13func main() { 14 s := []int{7, 2, 8, -9, 4, 0} 15 16 c := make(chan int) 17 go sum(s[:len(s)/3], c) 18 go sum(s[len(s)/3:len(s)*2/3], c) 19 go sum(s[len(s)*2/3:], c) 20 x, y, z := <-c, <-c, <-c// receive from c 21 22 fmt.Println(x, y, z, x+y+z) 23} 24
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 09:27
2020/10/05 09:40
2020/10/05 09:49
2020/10/05 11:57 編集
2020/10/05 11:56