第一个goroutine + channel 程序
2021-06-09 本文已影响0人
我爱张智容
func main() {
c := make(chan int)
go func() {
defer fmt.Println("子协程执行结束 。。。")
fmt.Println("子协程 正在运行 。。。。。 ")
c <- 666 // 写入通道
}()
num := <-c // 从通道中获取数据
fmt.Println("num = ", num)
fmt.Println("主协程执行完毕。。。")
}
无缓冲通道
TODO: ......
有缓冲通道
TODO: ......
channel 模拟 生产者和消费者
// chan<- //只写
func counter(out chan<- int) {
defer close(out)
for i := 0; i < 5; i++ {
out <- i //如果对方不读 会阻塞
}
}
// <-chan //只读
func printer(in <-chan int) {
for num := range in {
fmt.Println(num)
}
}
func main() {
c := make(chan int) // chan //读写
go counter(c) //生产者
printer(c) //消费者
fmt.Println("done")
}
Ticker是一个定时触发的计时器,它会以一个间隔(interval)往channel发送一个事件(当前时间),而channel的接收者可以以固定的时间间隔从channel中读取事件。
func main() {
ticker := time.NewTicker(time.Second * 1)
i := 0
go func() {
for {
<-ticker.C
i++
fmt.Println(" i := ", i)
if i == 5 {
ticker.Stop() // 停止定时器
}
}
}()
for {
}
}