新Sir

导航

 

退出管道

package main

import (
	"fmt"
	"time"
)
// 每隔 1s 向通道 发送一条信息
func Sender(c chan string)  {
	t := time.NewTicker(1 *time.Second)

	for {
		c <- "i am sending a message"
		<-t.C
	}

}


func main()  {
	// 创建一个字符串通道
	message := make(chan string)
	// 创建一个 bool 类型通道 用于退出for 循环
	stop :=make(chan bool)

	//  新起一个 Goroutine  调用Sender 函数,每隔1s 向message通道发送数据
	go Sender(message)


	// 新起一个 Goroutine 5 秒之后,向 for 循环 管道case 发送一条消息
	go func() {
		time.Sleep(time.Second*5)
		fmt.Println("time is up")
		stop <- true
	}()


	// 通过for 循环 收到消息后立即打印它
	for {
		select {
		// 通过创建一个通道,可让程序向这个通道发一条消息, stop 管道 收到 消息 就return 从而结束for 循环
		case <- stop:
			return

		case msg := <- message:
			fmt.Println(msg)

		}

	}

}

  

posted on 2021-07-01 11:17  新Sir  阅读(125)  评论(0编辑  收藏  举报