package main
import (
"fmt"
"time"
)
func main() {
tricker := time.NewTicker(time.Second)
syncChan := make(chan struct{}, 2)
dataChan := make(chan string, 10)
stop := make(chan struct{}, 1)
go func() {
defer close(dataChan)
loop:
for {
select {
case <-tricker.C:
dataChan <- time.Now().String()
case <-stop:
tricker.Stop()
break loop
}
}
fmt.Println("写入完成")
syncChan <- struct{}{}
}()
go func() {
var i int
for ele := range dataChan {
i++
fmt.Println(ele)
if i >= 3 {
stop <- struct{}{}
break
}
}
fmt.Println("读取完成")
syncChan <- struct{}{}
}()
<-syncChan
<-syncChan
}
2020-11-29 22:54:16.2121958 +0800 CST m=+1.006215101
2020-11-29 22:54:17.2186909 +0800 CST m=+2.012710201
2020-11-29 22:54:18.2226064 +0800 CST m=+3.016625701
读取完成
写入完成