go - 创建通用渠道
问题描述
我的结构定义了一个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
),但我怎样才能将它更新到我的目的?
解决方案
正如@torek 在我的问题中所评论的那样,我试图完成的事情将在Go v1.18 中实现。
现在,我最终做的是:
handler := &ws.SessionHandler{
Subscribers: make(map[chan json.RawMessage]bool),
}
我不再依赖 go struct 并json.RawMessage
在我的频道中进行交流。它并不完全干净,因为我需要编组/解组我的消息以给予适当的处理,但它是“通用的”,我可以完成我想做的事情。
推荐阅读
- java - 扫描仪 nextLine() 在 nextInt() 之后被跳过
- database - 在 mongoDB 中存储两个相同类型的列表的最佳方法是什么?
- java - 使用 ToF 距离传感器从处理上的 USB 端口流式传输数据
- java - 多循环代码迁移到 java 8:这是最好的方法吗?
- node.js - 如何使用 Microsoft Bot Framework (v3) 最好地模块化对话框?
- postgresql - Postgres 坚持在 Group By 语句中使用主键,而 SQLite 没有
- angular-material - 插值在 mat-form-field 内因 mat-error 无法正常工作
- python - 根据标记的一周分区拆分日期时间间隔
- c++ - 在 C++ 中使用指令和声明
- javascript - 即使我转发了端口,端口也关闭了