gpt4 book ai didi

go - 为什么在使用 select 并顺序将值输入 2 个 channel 时所有 goroutine 都处于休眠状态?

转载 作者:行者123 更新时间:2023-12-01 22:43:10 24 4
gpt4 key购买 nike

我有 2 个 channel ,我在 main 开头传递值函数,然后我有一个匿名 goroutine 应该打印值:

package main

import (
"fmt"
)

func main() {
rand1 := make(chan int)
rand2 := make(chan int)
rand1 <- 5
rand2 <- 7

go func() {
select {
case <-rand1:
fmt.Println("rand1")
case <-rand2:
fmt.Println("rand2")
return
}
fmt.Println("test")
}()
}

但是我收到错误 fatal error: all goroutines are asleep - deadlock! .但是匿名 goroutine 应该在 rand2 时返回。 channel 是接收它的值。

最佳答案

对 channel 的写入将阻塞,直到另一个 goroutine 从中读取。在您启动阅读器 goroutine 之前,您的程序正在尝试写入 channel 。首先启动阅读器 goroutine,然后写入 channel 。
不是它的编写方式,goroutine 只会从其中一个 channel 读取并返回,因此您的程序将再次死锁,因为第二次写入会阻塞。

关于go - 为什么在使用 select 并顺序将值输入 2 个 channel 时所有 goroutine 都处于休眠状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63417889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com