go:chan[通道(channel)]的理解1

go:chan[通道(channel)]的理解12 主函数继续执行,输出“main func:i am not shown until slowFunc2 completes”

大家好,欢迎来到IT知识分享网。

代码如下:

package main import ( "fmt" "time" ) func main() { ch := make(chan string) go slowFunc2(ch) msg := <-ch fmt.Println("chan:", msg) fmt.Println("main func:i am not shown until slowFunc2() completes") time.Sleep(time.Second * 3) } func slowFunc2(c chan string) { time.Sleep(time.Second * 2) c <- "slowFunc2() finnished,order:1" fmt.Println("at slowFunc2:slowFunc2() finished,order:1") }

执行结果如下:

D:\Desktop\goTest>routineTest.exe chan: slowFunc2() finnished,order:1 main func:i am not shown until slowFunc2() completes at slowFunc2:slowFunc2() finished,order:1 

go:chan[通道(channel)]的理解1

从上面的这个执行结果,可以看到,

1 先是管道的内容,回到主函数,首先输出“chan: slowFunc2() finnished,order:1”

2 主函数继续执行,输出“main func:i am not shown until slowFunc2() completes”

3 并发的协程函数还在执行,因为主函数执行的慢(有等待延时),所以并发协程才有机会输出“at slowFunc2:slowFunc2() finished,order:1”。

如果把主函数的等待3秒去掉,那么执行可能主函数已经执行完毕消耗了,而并发的协程还没有执行完,也就没有机会打印输出了。

测试如下:

package main import ( "fmt" "time" ) func main() { ch := make(chan string) go slowFunc2(ch) msg := <-ch fmt.Println("chan:", msg) fmt.Println("main func:i am not shown until slowFunc2() completes") // time.Sleep(time.Second * 3) } func slowFunc2(c chan string) { time.Sleep(time.Second * 2) c <- "slowFunc2() finnished,order:1" fmt.Println("at slowFunc2:slowFunc2() finished,order:1") } 

结果如下:

D:\Desktop\goTest>routineTest.exe chan: slowFunc2() finnished,order:1 main func:i am not shown until slowFunc2() completes

go:chan[通道(channel)]的理解1

go:chan[通道(channel)]的理解1

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/58279.html

(0)
上一篇 2024-07-05 08:33
下一篇 2024-07-06 12:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信