Golang 错误:- 所有 goroutine 都在睡觉 - 死锁

问题描述 投票:0回答:1
package main

import (
    "fmt"
)

func main() {


    val_channel := make(chan int)
    val_channel <- 1 // **error pointing this line**
    fmt.Println(<-val_channel)
    defer close(val_channel)
}

这段代码有什么问题吗? 我们不能在我们创建的渠道上赋予价值吗?

如果我将下面的代码片段放在单独的 go-routine 中,它会编译并运行良好 -

package main

import (
    "fmt"
)

func main() {


    val_channel := make(chan int)

    go func() {
        val_channel <- 1
    }()

    fmt.Println(<-val_channel)

    defer close(val_channel)
}

我是否错过了 go 并发的任何琐碎概念?

go concurrency goroutine
1个回答
0
投票

在第一定律中,问题是这个频道没有监听例程。因此,您的主要代码陷入僵局。 在第二个代码示例中,您有两个,第一个写入,第二个读取,在这种情况下没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.