#例文と質問
例えば
go
1func test() { 2 for { 3 select { 4 case v, ok := <-ch: 5 if ok { 6 fmt.Println(v) 7 } else { 8 fmt.Println("close") 9 } 10 default: 11 } 12 } 13}
このようなtest関数を作り、ループで待機させてここに別のgoroutine(例えばmain関数)からどんどんchannel経由で値を送っていき、それを裁かせるようにしたいのですが、そういう場合他のgoroutineからの値の送信はどのようにすれば一番合理的でしょうか。
#考えたこと
グローバル変数を使って
go
1var ch = make(chan string) 2 3func main() { 4 go test() 5 ch <- "Hello" 6 ch <- "2" 7 ch <- "teratail" 8} 9 10func test() { 11 for { 12 select { 13 case v, ok := <-ch: 14 if ok { 15 fmt.Println(v) 16 } else { 17 return 18 } 19 default: 20 } 21 } 22}
とすれば、test関数からもmain関数からもch変数を参照できて楽なのですが、どうもグローバル変数を簡単に作るのはよくない気がします。
このように複数のgoroutine同士のやりとりの際のチャネルの参照方法について、グローバル変数を使ってもいいのか、もしくはできるだけスコープを狭めるようにした実装がいいのか。また後者なら方法をご教授ください。
お願いいたします...
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/21 10:13
退会済みユーザー
2018/05/21 22:03
退会済みユーザー
2018/05/22 11:57