Golang中未输入频道

时间:2019-03-02 12:21:33

标签: go channel untyped-variables

我正在写一些程序包,其中channel仅用于中断某些进程,因此它永远不会读取任何值,只是检测到它需要停止,就像这样:

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

稍后,我希望此功能接受任何类型的频道。有可能吗?

1 个答案:

答案 0 :(得分:3)

  

我希望此功能接受任何类型的频道。有可能吗?

否,这是不可能的。 Go中没有未分类的频道。您可以使用interface{}接受任何类型的频道,然后使用反射与该频道进行交互。但这麻烦且缓慢,因此不建议使用。

一种更好的方法可能是确定单一类型的渠道(chan struct{}是您的用例的自然选择),或者改用context变量来处理取消以标准化的方式。