うーん、もっとスマートな方法はないかなぁ
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Start!")
// boolの型でchannelを作成する
ch1 := make(chan bool)
ch2 := make(chan bool)
ch3 := make(chan bool)
// goroutineを生成して、サブスレッドで処理する
go func() {
time.Sleep(2 * time.Second)
// chに対してtrueを投げる(送信)
ch1 <- true
ch2 <- true
ch3 <- true
}()
go func() {
fmt.Println("func2 start")
<-ch1
fmt.Println("func2 end")
}()
go func() {
fmt.Println("func3 start")
<-ch2
fmt.Println("func3 end")
}()
//isFin := <-ch // <-chだけでもブロック出来る
fmt.Println("before time.Sleep(10 * time.Second)")
time.Sleep(10 * time.Second)
fmt.Println("after time.Sleep(10 * time.Second)")
<-ch3
// chをクローズする
close(ch1)
close(ch2)
close(ch3)
// 受信した値をprintする
//fmt.Println(isFin)
fmt.Println("Finish!")
}