请教一个读取channel的问题

slash · · 861 次点击
综合了楼上各位的分析和提示,查了一些资料。导致这种情况的原因是对channel进行了不规范的操作。这里推荐一篇文章:[如何优雅的关闭channel](https://studygolang.com/articles/12456)
#4
更多评论
yccc
正在学go的路上
var err []string go func() { for { time.Sleep(time.Microsecond) // 加个休眠 select { case r := <-resultChan: length += 1 if r == "success" { if length == 100 { close(resultChan) done <- true } } else if r == "" { fmt.Printf("读到空字符串") } else { err = append(err, r) } } } }() 猜测是执行太快了,select有空就读chan,若读不到则返回chan对应type的默认值。
#1
case r ,ok:= <-resultChan: if !ok { fmt.Println("结束") return } ...
#2