老师好, 这里有一个顺序的问题想请教下,为啥先go worker(),再去发数据给chan?

来源:11-1 channel

尼克2018

2021-01-09

按照正常理解顺序,不应该是先发数据的代码放前面,再go worker()去收数据吗?

写回答

3回答

ccmouse

2021-01-11

必须先go worker()。

发送数据是一个阻塞的动作。如果先发数据,在发送的时候就阻塞了,程序卡在发送这一行无法往下走,导致后面的go worker()无法执行。同学可以试一下,系统很有可能会报deadlock的错误。即使不报,也会卡住。

反之,go worker()之后,收数据的worker就等在那里,随后就可以顺利发送了。

3
0

慕仙908892

2021-06-01

你可以理由为chan必须要有接收者,才允许有发送者。你可以理解为GO怕你是个小白,写了发送不写接收。所以必须得先有接收者

2
0

chenjianyun

2021-05-22

应该是有缓存的channel先发送就可以,没有缓存的channel就必须要先接收后发送

1
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程