深入理解Go语言中的Channel与Select
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个无缓冲的channel
ch := make(chan string)
// 启动一个goroutine,每秒发送一次消息到channel
go func() {
for {
time.Sleep(time.Second)
ch <- "Hello, Channel!"
}
}()
// 使用select监听channel是否有消息可读
for {
select {
case msg := <-ch:
fmt.Println(msg)
case <-time.After(5 * time.Second):
fmt.Println("Timeout!")
return
}
}
}
这段代码创建了一个无缓冲的字符串类型channel,并在一个goroutine中循环发送消息。使用select语句监听channel,如果在5秒内有消息到达,则打印消息;如果5秒内没有消息,则触发超时并退出程序。这个例子展示了如何使用channel和select实现并发程序中的超时机制。
评论已关闭