在查看一些 Go 代码时,我发现了以下内容:
ch := make(chan int)
我在在线教程中查找了 Go Channels 的工作原理:
https://tour.golang.org/concurrency/2 https://tour.golang.org/concurrency/2
但我觉得这个例子不清楚。
有人可以给我一个简单的解释和使用通道的示例吗?
chan是 Golang 中的一个通道。简而言之,您可以将其视为一个盒子,将物品放在一端,然后从另一端取出它。
无缓冲通道
缓冲通道
这是我为您编写的用于理解通道的小代码。现在更改 go 例程的顺序并查看输出。每次输出可能不同。
package main
import (
"fmt"
"time"
)
func main() {
messages := make(chan int)
go func() {
time.Sleep(time.Second * 3)
messages <- 1
}()
go func() {
time.Sleep(time.Second * 2)
messages <- 2
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 3
}()
go func() {
for i := range messages {
fmt.Println(i)
}
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 4
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 5
}()
time.Sleep(time.Second * 5)
}
为了更好地理解,请访问此博客,其中以 GUI 描述了 go 例程和通道。
Visit http://divan.github.io/posts/go_concurrency_visualize/ http://divan.github.io/posts/go_concurrency_visualize/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)