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 并发的任何琐碎概念?
在第一定律中,问题是这个频道没有监听例程。因此,您的主要代码陷入僵局。 在第二个代码示例中,您有两个,第一个写入,第二个读取,在这种情况下没有问题。