首页 > 解决方案 > 创建通用渠道

问题描述

我的结构定义了一个Subscribers映射通道。

package ws

type SessionHandler struct {
    Subscribers      map[chan interface{}]bool
}

我想用任何类型的通道来实例化它,就像这样:

type WsSession struct {
  handler *ws.SessionHandler
}

handler := &ws.SessionHandler{
    Subscribers:      make(map[chan WsResponse]bool),
}

我提供的代码示例不起作用(cannot use make(map[chan WsResponse]bool) (value of type map[chan WsResponse]bool) as map[chan interface{}]bool value in struct literal),但我怎样才能将它更新到我的目的?

标签: go

解决方案


正如@torek 在我的问题中所评论的那样,我试图完成的事情将在Go v1.18 中实现。

现在,我最终做的是:

handler := &ws.SessionHandler{
    Subscribers:      make(map[chan json.RawMessage]bool),
}

我不再依赖 go struct 并json.RawMessage在我的频道中进行交流。它并不完全干净,因为我需要编组/解组我的消息以给予适当的处理,但它是“通用的”,我可以完成我想做的事情。


推荐阅读