Go语言的timeout和select随机问题

663280439 · · 4536 次点击
这个程序 有问题,你的 case 的 else 部分永远得不到执行。所以 根本不能证明什么。给你加上 close(ch1);close(ch2)就可以了 ```go package main import "fmt" import "time" func main() { //定义两个字符串类型的channel ch1, ch2 := make(chan string, 0), make(chan string, 0) //启用goruntine不断从两个channel中读取数据 go func() { fmt.Println("start") time.Sleep(5 * time.Second) fmt.Println("wait") time.Sleep(2 * time.Second) //i := 1 for { // fmt.Println(i) // i++ select { case v, ok := <-ch1: if ok { fmt.Println(ok, v) } else { fmt.Println("!!!!") } case v, ok := <-ch2: if ok { fmt.Println(ok, v) } else { fmt.Println("~~~~") } } } }() time.Sleep(2 * time.Second) ch1 <- "cccc" ch2 <- "dddd" close(ch1) close(ch2) time.Sleep(1 * time.Second) fmt.Println("end") } ```
#2
更多评论
<a href="/user/Unknown" title="@Unknown">@Unknown</a> <a href="/user/88250" title="@88250">@88250</a>
#1
麻烦贴一下 Playground 分享的链接。
#3