程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了接受一个接口,将结果传递给一个对应数据类型的通道大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决接受一个接口,将结果传递给一个对应数据类型的通道?

开发过程中遇到接受一个接口,将结果传递给一个对应数据类型的通道的问题如何解决?下面主要结合日常开发的经验,给出你关于接受一个接口,将结果传递给一个对应数据类型的通道的解决方法建议,希望对你解决接受一个接口,将结果传递给一个对应数据类型的通道有所启发或帮助;

我正在运行一个处理不同类型数据的 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,因为:

  1. 如果我把它定义为chan <- wsItemHolder,当我在另一通道端接收到数据时,它已经是一个接口,而不是一个@H_497_9@myCustomType,我可以查看它但我无法处理它-迭代、访问字段等...因为它不是地图。
  2. 如果我将通道定义为 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,请注明来意。