小编Ari*_*ric的帖子

为什么goroutine中的未缓冲通道得到了这个顺序

我正在使用goroutine和通道编写一些golang并发代码,这是我的代码:

package main

import "fmt"

func main() {
    in := make(chan int)

    go func() {
        fmt.Println("Adding num to channel")
        in <- 1
        fmt.Println("Done")
    }()
    val := <- in
    fmt.Println(val)
}
Run Code Online (Sandbox Code Playgroud)

我认为我创建了一个无缓冲的通道,内部通道必须等待,直到外部通道读取它为止,并且输出可能像这样:

Adding num to channel
1
Done
Run Code Online (Sandbox Code Playgroud)

但实际上,输出为:

Adding num to channel
Done
1
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么内部无缓冲通道只是在不等待读取的情况下运行

channel go goroutine

0
推荐指数
1
解决办法
39
查看次数

标签 统计

channel ×1

go ×1

goroutine ×1