所以在这里,我已删除的for循环,并提出了超时通过添加第二个case到select的是收益后3秒。因为selectjust一直等到ANY情况成立,所以第二次case触发,然后脚本结束,chatter()甚至没有机会完成。
// 将select语句与通道一起使用,用于超时等。 package main import ( "fmt" "time" ) // Function that is "chatty" //将单个参数设为一个通道以向下发送消息 func chatter(chatChannel chan<- string) { // 循环十次而死 time.Sleep(5 * time.Second) // 睡5秒钟 chatChannel<- fmt.Sprintf("This is pass number %d of chatter", 1) } // 主要功能 func main() { // 创建通道,它将仅接收字符串,而无需在该项目上使用缓冲区 chatChannel := make(chan string) // 完成后清理频道 defer close(chatChannel) // 从chat不休地开始执行例程(独立,无阻塞) go chatter(chatChannel) // select语句将阻塞该线程,直到满足以下两个条件之一 // 因为我们有默认设置,所以只要聊天者不聊天,我们都会达到默认设置 select { // 每当聊天者聊天时,我们都会捕获并输出 case spam := <-chatChannel: fmt.Println(spam) // 如果聊天者聊天时间超过3秒,请停止等待 case <-time.After(3 * time.Second): fmt.Println("Ain't no time for that!") } }