栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

去教程选择语句

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

去教程选择语句

请记住,通道会阻塞,因此select语句为:

select {case c <- x: // if I can send to c    // update my variables    x, y = y, x+ycase <-quit: // If I can receive from quit then I'm supposed to exit    fmt.Println("quit")    return}

没有

default
案例意味着“如果我无法发送给c并且我不能从quit中读取,请阻塞直到可以。”

然后在您的主要过程中,您将剥离另一个函数以读取

c
结果以打印结果

for i:=0; i<10; i++ {    fmt.Println(<-c)  // read in from c}quit <- 0  // send to quit to kill the main process.

这里的关键是要记住通道阻塞,并且您正在使用两个未缓冲的通道。利用

go
分拆的第二功能让您从消费
c
那么
fibonacci
将继续。


Goroutines是所谓的“绿色线程”。使用关键字启动函数调用

go
会将其分解为一个新进程,该进程独立于执行主线运行。本质上,
main()
gofunc() ...
正在同时运行!这很重要,因为我们在此代码中使用了生产者/消费者模式。

fibonacci
产生值并将其发送到
c
,从main派生的匿名goroutine会消耗
c
并处理它们的值(在这种情况下,“处理它们”仅意味着打印到屏幕上)。我们不能简单地产生所有值然后消费它们,因为
c
会阻塞。此外,
fibonacci
它将永远产生更多的值(或无论如何直到整数溢出),因此即使您拥有一个具有无限长缓冲区的魔术通道,也永远不会到达使用者。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号