Go问答 chan 小问题

dbas · 2020年05月20日 · 最后由 wxj95 回复于 2020年05月22日 · 454 次阅读
func increment(ch chan bool, x *int) {
    ch <- true   //这里发送出去,下面的接受有这么快准备好接收了吗?
    *x = *x + 1
    <-ch
}

为什么上面的在同一个线程跑就不会错, 下面的会错

func main() {
    pipline := make(chan string)
    pipline <- "hello world"
    fmt.Println(<-pipline)
}
更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio

不知道你说的为什么上面的在同一个线程跑就不会错, 下面的会错 是啥意思。

func main() {
    pipline := make(chan string)
    pipline <- "hello world"
    fmt.Println(<-pipline)
}

这段代码会一直阻塞在pipline <- "hello world" 这一行,因为 Channel 默认是没有缓存的,所以如果你要这段代码正常执行可以把pipline := make(chan string)改为pipline := make(chan string,1)

主线程阻塞就会报错

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册