如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/