go - 向两个 channel 发送数据,第二个 channel 有时可能会先接收到数据

标签 go

package main

func m() {
    c1 := make(chan int, 1)
    c2 := make(chan int, 1)
    go func() {
        c1 <- 1
        c2 <- 1
    }()
    select {
    case <-c1:
    case <-c2:
        println("no way")
    }
}

func main() {
    for i := 0; i < 1000000; i++ {
        m()
    }
}

有两个 channel c1c2

我们在 goroutine 中将数据发送到 c1c2。我们有一个 select 来接收来自这两个 channel 的数据并返回。

问题是:在大多数情况下,我们首先将数据发送到c1 并首先从c1 接收。但有时我们先从 c2 接收,然后先发送到 c1。为什么?

最佳答案

关于go - 向两个 channel 发送数据,第二个 channel 有时可能会先接收到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50553796/

相关文章:

dictionary - 为什么http.Header中slice的长度返回0?

pointers - 为什么Go的package标志使用指针?

csv - 无法使用golang读取csv文件中的json str

go install - 在 Win10 上的行为与 osx 或 linux 不同

go - golang中bufio的修改

go - 为什么会导致 goroutine 创建的测量时间不同?

go - 如何设置和解析正文请求中的时间?

google-app-engine - 如何对 Google App Engine Go HTTP 处理程序进行单元测试?

go - 在推断出 GOPATH 时运行(安装)go 代码

go - 无法在 vscode 中运行第一个 golang 项目