初学go语言,照着书上的素数程序,运行了一次。有一个问题有点拿不准,想来问问
先上程序
![go.PNG](https://static.studygolang.com/200901/787df68beb9d6583c1617540dbba2148.PNG)
我的理解是这样的(下图)
![go1.PNG](https://static.studygolang.com/200901/2742901b9262345cd5c17137fa531e93.PNG)
这样我就有了理解,所有协程中都可以操作通道ch中的数
请问我这个理解对吗?
如果对的话,我想问下会运行prime = 4 的情况吗?
如果此时ch通道中的数,已经没有了4,那说明协程是顺序执行吗(难道是因为共用了ch,才导致看似是顺序执行)?
我觉得ch只有一个,应该不会在同一时间段有多种状态吧?如下图
![go2.PNG](https://static.studygolang.com/200901/cb94d9b84d90971cdf2483905778cd5e.PNG)
模拟不出来效果,想来确认一下想法。
![go3.PNG](https://static.studygolang.com/200902/3235554a6ccc0a9de1d4e4450b1f956b.PNG)
我实际尝试了一下,发现ch确实被修改了,感觉自己还是不太理解这种无缓冲通道的实际是怎么回事。
我还有一个问题,按照这样来说,每一次循环通道ch中的数据都变成了一个新的,那么我前一次的ch会有怎样的变化呢?
如果有新的ch加入,前一个就没有用了,我猜他会被鲨掉,是立刻呢?还是mian函数结束?(我猜的,它可能很有用,也许不会被干掉)
这么一想又有了新的问题,第一次循环完毕,最开始的ch其实是没用了,`generate()`会源源不断的提供整数。看似没用了,其实还有用。那既然ch都改了,程序怎么在以后的循环中一直拿到`generate()`的值呢?
还是学艺不精,希望大佬赐教。解决一下我心中的疑惑。不太了解每次循环的ch之间是什么关系
#4
更多评论
不太明白你的想法,你这里声明的 ch 是 unbuffered 的,所以 ch 并不会像你注释的那样同一个时刻有多个数。而且当执行到 ch = ch1 的时候,这里的 ch 已经跟前面 `go generate(ch)` 的 ch 不是一个 ch 了。
#1
我其实想知道,每次循环后ch通道是个什么状态(其中的值是怎么改变的)。
你是说每次循环都会用值覆盖掉之前的ch通道吗?`go generate(ch)` 方法中是一个无限循环往通道赋值的一个函数。所以是第一次循环执行完毕之后 `generate()` 这个方法就已经被结束掉了吗?
其实我一直感觉协程应该是没有什么执行顺序的,但是我看到的感觉还是顺序执行的呢?
#2