+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 不太掌握 goroutine 和通道,请分解这段代码 >

不太掌握 goroutine 和通道,请分解这段代码

时间:2024-04-09 09:50:36

今天我将给大家介绍《不太掌握 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 作为值做任何您想做的事情:将其分配给另一个变量,将其作为参数传递给另一个函数,或者像您的情况一样忽略它......等等。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title