回答編集履歴
1
別の回答例を追記
answer
CHANGED
@@ -45,4 +45,57 @@
|
|
45
45
|
func common() {
|
46
46
|
fmt.Println("common")
|
47
47
|
}
|
48
|
+
```
|
49
|
+
|
50
|
+
大切なのは出力がcommonが決めた内容とhoge#が決めた内容が「一塊」であるということ。
|
51
|
+
実装例のひとつは以下の通り。
|
52
|
+
messageQueueには文字列スライスを投入可能にして、
|
53
|
+
|
54
|
+
- common決定した文字列とhoge1が決定した文字列をセットでキューに投げ込む
|
55
|
+
- common決定した文字列とhoge2が決定した文字列をセットでキューに投げ込む
|
56
|
+
|
57
|
+
別のgoroutineでmessageQueueの内容をひたすらfmt.Printする。
|
58
|
+
[https://play.golang.org/p/DyFpZfb1YLb](https://play.golang.org/p/DyFpZfb1YLb)
|
59
|
+
```go
|
60
|
+
package main
|
61
|
+
|
62
|
+
import (
|
63
|
+
"fmt"
|
64
|
+
)
|
65
|
+
|
66
|
+
func main() {
|
67
|
+
messageQueue := make(chan []string, 10)
|
68
|
+
go func() {
|
69
|
+
for v := range messageQueue {
|
70
|
+
for _, s := range v {
|
71
|
+
fmt.Println(s)
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}()
|
75
|
+
ch := make(chan bool, 10)
|
76
|
+
for i := 0; i < 100; i++ {
|
77
|
+
ch <- true
|
78
|
+
go func() {
|
79
|
+
fuga(messageQueue)
|
80
|
+
<-ch
|
81
|
+
}()
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
func fuga(msg chan<- []string) {
|
86
|
+
hoge1(msg)
|
87
|
+
hoge2(msg)
|
88
|
+
}
|
89
|
+
|
90
|
+
func hoge1(msg chan<- []string) {
|
91
|
+
msg <- []string{common(), "hoge1"}
|
92
|
+
}
|
93
|
+
|
94
|
+
func hoge2(msg chan<- []string) {
|
95
|
+
msg <- []string{common(), "hoge2"}
|
96
|
+
}
|
97
|
+
|
98
|
+
func common() string {
|
99
|
+
return "common"
|
100
|
+
}
|
48
101
|
```
|