func ChannelTest() {
datas := []int{1, 2, 3, 4, 5}
cz := make(chan int, len(datas))
for _, data := range datas {
cz <- data
}
for i := 0; i < len(datas); i++ {
item := <-cz
fmt.Println(item)
}
for _, data := range datas {
cz <- data
}
close(cz)
isRun := true
for isRun {
select {
case num, ok := <-cz:
if !ok {
fmt.Println("通道关闭")
cz = make(chan int)
} else {
fmt.Println("当前读取:", num)
}
default:
fmt.Println("执行了default代码块")
isRun = false
}
}
fmt.Println("done!")
timeChan := time.Tick(time.Second)
for {
select {
case time := <-timeChan:
fmt.Println(time)
}
}
}
func main() {
ch := make(chan string, 0)
defer func() {
close(ch)
}()
go func() {
for {
time.Sleep(time.Second * 1)
fmt.Println(time.Now().Unix())
select {
case m := <-ch:
fmt.Println(m)
break
default:
fmt.Println("waiting...")
}
}
}()
time.Sleep(time.Second * 4)
ch <- "stop"
}