【问题标题】:Send channel through a channel with Go使用 Go 通过通道发送通道
【发布时间】:2015-05-20 13:37:09
【问题描述】:

我想通过频道发送指向频道的指针。围棋可以吗?如何定义接受此类通道的函数?

我试过了:

func test() (chan *chan)
func test() (chan chan)

【问题讨论】:

  • 你真的不需要指针 .. 通道本身就是你在 Go 中所谓的“引用类型”。它们不像指针那么轻……但它们像切片一样轻。
  • 通过频道发送频道结束在某些圈子中被称为“移动频道”。它受 Milner 的 Pi 微积分 (en.wikipedia.org/wiki/%CE%A0-calculus) 的约束。

标签: concurrency go channel


【解决方案1】:

总是有某种类型与频道相关联。假设类型是T。 T的一个通道是:

chan T

指向 T 的通道的指针是:

*chan T

指向T的通道的指针的通道是:

chan *chan T

接受指向 T 的通道指针的通道的函数是:

func f(c chan *chan T) { }

由于通道是引用类型,您可能不需要使用指针。尝试使用

 func (f c chan chan T) { }

playground example

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2014-09-25
    相关资源
    最近更新 更多