【发布时间】:2022-12-07 05:56:52
【问题描述】:
我是 GO 的新手,正在尝试做这样的事情。
假设我有两种不同类型的消息要写入一个频道,
c <- &Message1{}
c <- &Message2{}
(我无法为每种消息类型创建两个不同的频道)
现在,我想在单独的 goroutine 中访问这两条消息。
即在Goroutine1我只想要Message1{},所以我应该只听Message1{}并忽略Message2{}频道
something := <-c
switch v := something.(type) {
case *Message1: // do something
// ignore message2
}
同样,在Goroutine2中我只想要Message2{},所以我应该只听Message2{}并忽略该频道上的Message1{}。
something := <-c
switch v := something.(type) {
case *Message2: // do something
// ignore Message1
}
有没有办法做到这一点?
【问题讨论】:
-
你需要两个不同的渠道。您不能有选择地从频道中挑选消息。
-
“我无法为每种消息类型创建两个不同的频道”是的你可以。
-
如果只想传递一个数据结构,请将两个通道包装在一个结构中。如果您想在本机使用发送/接收运算符,或定义
Send和Rec方法,请导出频道。使用泛型,您可以使此结构可重用