首页 > 解决方案 > 这段代码中的第二个 goroutine 在哪里,从通道下的 gobyexample 复制

问题描述

正如 gobyexample https://gobyexample.com/channels上解释的那样,它说

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

package main

import "fmt"

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

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

标签: go

解决方案


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
}

推荐阅读