我正在编写一些包,其中通道仅用于中断某个进程,因此它永远不会读取任何值,只是检测到它需要停止,如下所示:
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
变量,它可以以标准化的方式处理取消。