退出管道
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)
}
}
}
浙公网安备 33010602011771号