不太掌握 goroutine 和通道,请分解这段代码
偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《不太掌握 goroutine 和通道,请分解这段代码》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!
问题内容我正在快速介绍 go,其中一个示例是:
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
done <- true
}
func main() {
done := make(chan bool, 1)
go worker(done)
<-done
}
我明白发生了什么,但我想我没有掌握事件的顺序或限制?
- 创建一个名为
done
的通道,缓冲区大小为 1。 - 通道被传递到函数中
- 计时器完成后,它会向通道添加
true
布尔值 - 我不确定最终的
<-done
正在做什么
来自:https://gobyexample.com/channel-synchronization
解决方案
接收器运算符 <-
后跟通道名称(在本例中为 done
)用于等待从工作 goroutine 写入通道的值。 (即这个读操作将是阻塞的。如果你省略 <-done
,即使在worker的goroutine启动之前,main goroutine也会立即退出,并且你将看不到结果)
您可以使用 <-done
作为值做任何您想做的事情:将其分配给另一个变量,将其作为参数传递给另一个函数,或者像您的情况一样忽略它......等等。
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持编程网!更多关于Golang的相关知识,也可关注编程网公众号。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341