golang中的无类型频道

问题描述 投票:-1回答:1

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

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

后来我希望这个功能能够接受任何类型的频道。那可能吗?

go channel untyped-variables
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.