我正在写一些程序包,其中channel仅用于中断某些进程,因此它永远不会读取任何值,只是检测到它需要停止,就像这样:
func myfunc(stop_chan chan /*bool*/) {
for {
//do something time consuming
// ....
// check on channel
select{
case <-stop_chan:
//cleanup
return
default:
}
// continue working
}
}
稍后,我希望此功能接受任何类型的频道。有可能吗?
答案 0 :(得分:3)
我希望此功能接受任何类型的频道。有可能吗?
否,这是不可能的。 Go中没有未分类的频道。您可以使用interface{}
接受任何类型的频道,然后使用反射与该频道进行交互。但这麻烦且缓慢,因此不建议使用。
一种更好的方法可能是确定单一类型的渠道(chan struct{}
是您的用例的自然选择),或者改用context
变量来处理取消以标准化的方式。