Golang テストプログラム Channelによるブロックを回避する方法として、Goのタイマー time.Timerで、定期的にブロックを破れるかのテストプログラム
// go get github.com/lib/pq を忘れずに
// go run main12.go
/*
Channelによるブロックを回避する方法として、Goのタイマー time.Timerで、定期的にブロックを破れるかのテストプログラム
*/
package main
import (
"fmt"
"time"
_ "github.com/lib/pq"
)
var Ch1 chan interface{}
func channel_maker() {
for {
time.Sleep(2 * time.Second) // 2秒待つ ()
Ch1 <- "Ebata is great"
}
}
func main() {
Ch1 = make(chan interface{}) // チャネルの初期化
go channel_maker()
ping := time.NewTimer(5 * time.Second) // イベントが何もなくても5秒後に発火するようにする
defer ping.Stop() // main()を抜ける前に無効にしておく(なくてもいいかも)
for {
select {
case a := <-Ch1:
fmt.Println(a)
case <-ping.C:
fmt.Println("A ping is coming")
ping = time.NewTimer(5 * time.Second) // イベントが何もなくても5秒後に発火するようにする
}
}
}
うむ・・・ちゃんと動く。困った。