初级会员
  • 第 56178 位会员
  • Felin5307
  • 2020-09-01 09:00:22
  • 13
  • Offline
  • 20 0

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #10 @Pikachu 也许这里不应该用 channel 的指针,因为 channel 的值就相当于指针。直接打印 ch 和 ch1 你就知道了。
  • #7 @Pikachu 对于你原帖的代码,因为你每次都创建新的 ch1 和 新建一个 goroutine 来运行 `filter()` 所以是有可能会有多个 `filter()` 并行运行。另外你每次循环 ch 的地址都会变,因为 `ch = ch1`
  • 4楼 @Pikachu 对于你的原帖的源代码,在第一次循环之后,最初 ch 就已经没有用了,但因为 `generate()` 还在用它所以并不会被 gc 回收,但是因为 ch 是 unbuffered 的,实际上 `generate()` 只会把 2 送进 ch,送 3 的时候就会被阻塞。每个循环后的 ch 多没关系了,因为你每次循环都创建了一个新的 ch。 对于你在4楼贴的代码,`filter()` 是能够源源不断拿到 `generate()` 产生的数的,因为你传入 `filter()` 的 ch 还是旧的ch,之后的 ch 就跟 ch1 一样,是传入 `filter()` 的 out。
  • 每次循环之后,ch 已经不是 传入 `generate()` 的那个 ch 了。因为你的 ch 是 unbuffered 的,每次 `ch<- ` 都会阻塞当前 go routine 直到另外一个 go routine `<- ch` 能否给一下期待的打印结果和实际的打印结果?还有 `generate()`
  • 不太明白你的想法,你这里声明的 ch 是 unbuffered 的,所以 ch 并不会像你注释的那样同一个时刻有多个数。而且当执行到 ch = ch1 的时候,这里的 ch 已经跟前面 `go generate(ch)` 的 ch 不是一个 ch 了。