如gobyexample https://gobyexample.com/channels所述,它说

当我们运行程序时,“ping”消息已通过我们的通道成功地从一个goroutine传递到了另一个。 ,但是从我的角度来看,就像我们的代码中只有一个go例程,即go func (text string) { messages <- "ping"}()一样,所以我不知道“ping”消息来自哪个go例程以及它放在哪个go例程中

package main

import "fmt"

func main() {
   messages := make(chan string)
   go func (text string) { messages <- "ping"}()

   msg := <-messages
   fmt.Println(msg)
}

最佳答案

Go程序从单个goroutine开始。每个go语句添加另一个。因此,在您的程序中,有两个:一个在main()启动时启动,一个在到达go func ...行时首次启动。

func main() {
    messages := make(chan string) // goroutine 1
    go func (text string) {
        messages <- "ping"        // goroutine 2
    }()                           // goroutine 1 starting goroutine 2

    msg := <-messages             // goroutine 1
    fmt.Println(msg)              // goroutine 1
}

关于go - 从 channel 下面的gobyexample复制的这段代码中的第二个go例程在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60097217/

10-12 14:41