登录
首页 >  Golang >  Go问答

无类型通道在 Golang 中的应用

来源:stackoverflow

时间:2024-03-01 23:21:24 327浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《无类型通道在 Golang 中的应用》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在编写一些包,其中通道仅用于中断某些进程,因此它永远不会读取任何值,只是检测到它需要停止,如下所示:

func myfunc(stop_chan chan /*bool*/) {
  for {
    //do something time consuming
    // ....
    // check on channel
    select{
      case <-stop_chan:
        //cleanup
        return
      default:
    }
    // continue working
  }
}

后来我希望这个函数接受任何类型的通道。这可能吗?


解决方案


不,这是不可能的。 Go 中没有无类型通道。您可以使用 interface{} 接受任何类型的通道,然后使用反射与该通道交互。但这样既麻烦又慢,所以不推荐。

更好的方法可能是选择单一类型的通道(chan struct{} 是您的用例的自然选择),或者使用 context 变量,它可以以标准化方式处理取消.

理论要掌握,实操不能落!以上关于《无类型通道在 Golang 中的应用》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>