大佬教程收集整理的这篇文章主要介绍了接受一个接口,将结果传递给一个对应数据类型的通道,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在运行一个处理不同类型数据的 WebSocket。 我想坚持 DRY(不要重复自己)原则并使用一个单一的 WS 函数来完成所有相同的 WS 内容(连接、heartbeat、接受 WS 消息等...),而是将数据存储在不同的、对应的数据类型中。
简而言之,这就是我想要实现的目标:
type wsItemHolder interface {
ProcessItemData(data []bytE) // data = WS JsON msg
}
type MyCustomType map[String]int
func (data MyCustomTypE) ProcessItemData(data []bytE) {
// process my MyCustomType stuff by updating data by reference (as it's a map)
}
func processWebsocketData(data wsItemHolder,myChan chan <- ChanDataTypE) {
for {
// Do the basic WS stuff
data.processItem()
// pass the updated data to a chAnnel
}
}
问题:
我无法将 @H_497_9@myChan 传递给 processWebsocketData
,因为:
chan <- wsItemHolder
,当我在另一通道端接收到数据时,它已经是一个接口,而不是一个@H_497_9@myCustomType,我可以查看它但我无法处理它-迭代、访问字段等...因为它不是地图。chan <- MyCustomType
,则必须定义 processWebsocketData
,因为它接受这种特定类型的通道,并且我不能将它用于其他数据类型。因此,所有代码重用的好处都消失了。为什么我不想使用锁代替通道:
我的主要 goroutIne 如下所示:
func Main() {
go processWebsocketData(wsItemHolder) // Start independent WS connection to process data type 1
for {
a := getAndDoSomethingWithTHelastData()
}
}
所以当我在主 goroutIne 中读取和处理来自 WS 的数据时,我会阻塞 WS goroutIne 中的写入并导致瓶颈。
我怎样才能用频道做到这一点? 如果不可能,有哪些替代方案?
到目前为止,我已经研究了 https://github.com/orcaman/concurrent-map,但我不确定它如何/是否解决锁定问题。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的接受一个接口,将结果传递给一个对应数据类型的通道全部内容,希望文章能够帮你解决接受一个接口,将结果传递给一个对应数据类型的通道所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。