Goでチャンネルのテスト

package main

import (
	"fmt"
	"time"
	"math/rand"
)

func Func1(ch chan int) {
	for{
		// num := time.Duration(rand.Intn(3))
		num := time.Duration(1)
		i := <-ch
		fmt.Printf("[Func1] waiting %d seconds. ",num)
		fmt.Printf("ch %d\n",i)
		time.Sleep(num*time.Second)
	}
}

func Func2(ch chan int){
	for {
		// num := time.Duration(rand.Intn(3))
		num := time.Duration(3)
		i := <-ch
		fmt.Printf("[Func2] waiting %d seconds. ",num)
		fmt.Printf("ch %d\n",i)
		time.Sleep(num*time.Second)
	}
}

func main(){
	rand.Seed(time.Now().UnixNano())
	ch := make(chan int)
	go Func1(ch)
	go Func2(ch)

	for i:=0; i<10; i++ {
		ch <- i
	}
}
[Func2] waiting 3 seconds. ch 0
[Func1] waiting 1 seconds. ch 1
[Func1] waiting 1 seconds. ch 2
[Func1] waiting 1 seconds. ch 3
[Func2] waiting 3 seconds. ch 4
[Func1] waiting 1 seconds. ch 5
[Func1] waiting 1 seconds. ch 6
[Func1] waiting 1 seconds. ch 7
[Func2] waiting 3 seconds. ch 8
[Func1] waiting 1 seconds. ch 9