go - 这段代码中的第二个 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 程序从一个 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
}
推荐阅读
- python - Python - PySimpleGUI - 无法选择日历输入
- java - 我有这个错误:“无法将 java.lang.String 类型的对象转换为 com.flashpub.flash.imageSection 类型”,我不知道为什么
- javascript - 如何使用 Electron.js 彼此相邻显示自定义 Windows 消息框按钮
- android - 我怎样才能在android中制作一个完美的正方形?
- ios - 如何在运行时更改 UIMenu 内的 UIAction 的状态?
- c++ - 在 Xcode C-lang 中链接库
- javascript - 为什么我的应用脚本代码将电子表格复制到谷歌驱动器的根目录以及特定目录?
- docker - Dockerfile:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349
- java - 在方法重载中,方法解析发生在编译时还是运行时?
- python - 在 Ubuntu 20.04 上安装 Python 3.9 时出错 > 已解决