【发布时间】:2021-12-03 02:23:49
【问题描述】:
我的结构定义了一个映射通道的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),但我怎样才能将其更新到我的目的?
【问题讨论】:
-
chan interface{}的类型正好是chan interface{},仅此而已。如果您想要chan WsResponse,请改用该类型。 -
@Adrian 我说我想让它通用,对吧?这只是我如何使用它的一个示例,但我可以将
Subscribers设置在一个位置,例如WsResponse,然后设置在另一个位置,例如AnyOtherKindOfStruct。 -
SessionHandler是做什么的,它需要一个频道类型但不关心它是什么类型?这似乎更像是一个潜在的设计问题。 -
interface{}本身实际上是一个对象,它可以从一个对象隐式创建,但是接口通道与对象通道并不是一成不变的。这些是不同的类型。任何接口都不会出现在对象通道的另一端,反之亦然。 -
您可以在upcoming Go 1.18 中使用类型参数,就像在其他各种语言中使用泛型或模板一样。
标签: go