###第一弾###
第一弾
こちらはgoroutineをちょっとだけ触った記事
##登場人物##
- func goroutine1() 前の記事に仲間外れにされた人物
- func goroutine2() なぜか悪者にされた人物
- func main() こいつが本当の悪者
- var wg := ?? 今回の主役
goroutine.go
package main
import (
"time"
"fmt"
"sync"
)
func goroutine1(wg *sync.WaitGroup){
for i:=0;i<5;i++ {
time.Sleep(100*time.Millisecond);
fmt.Println("goroutine");
}
wg.Done()
}
func goroutine2(){
for i:=0;i<5;i++ {
time.Sleep(time.Millisecond);
fmt.Println("now");
}
}
func main(){
var wg sync.WaitGroup
wg.Add(1)
go goroutine1(&wg);
goroutine2();
wg.Wait()
}
今日の主役 sync.WaitGroup さんです
彼が2つのfuncの間を取り持ってくれます。
ここだけの話syncって同期って意味らしいですよ・・・
###解説?###
- wgをWaitGroupというstructで宣言します。
- wg.Add()にブロックするgoroutineの数を指定します。
- それをgoroutine1に投げ飛ばします。
- すると・・・**wg.Wait()が早くwg.Done()**かえってこねぇかなーと
mainでずっと待っててくれます。 - func goroutine1のループが終わると
- **wg.Done()**が返ってくるので終了ということになります。
###次回予告###
未定 たぶんchannel
最初にdefer wg.Done()でもいいのかなって思った