【发布时间】:2021-12-05 13:27:48
【问题描述】:
我想在 go 中编写一个将通用通道作为输入的函数。我希望它能够接受任何频道,无论该频道的类型如何。我以为我可以func myFunc(channel chan interface{}),但是当我尝试将我的频道传递给它时出现编译错误。有没有办法在 go 中做到这一点?
---编辑---
有人要求我提供一个最小的工作示例,所以我想我会在下面分享一些代码。我想要的是类似于
package main
func SendToChannel(arg interface{}, channel chan interface{}) error {
channel<-arg
//more logic here, potentially returning errors if something goes wrong
return nil
}
func main() {
IntChan := make(chan int)
StringChan := make(chan string)
SendToChannel(1,IntChan)
SendToChannel("hello",StringChan)
}
但是,这会产生编译错误,因为正如 Kelsnare 指出的那样,chan int、chan string 和 chan interface{} 是三种完全不同的类型。
在 2022 年仿制药问世之前,这似乎是不可能实现的,但如果有人发现了解决方法,我很想听听。
【问题讨论】:
-
现在,使用 Go
1.17及以下版本,您必须这样做:myFunc(channel interface{})。明年,使用 Go1.18你应该可以做到:myFunc(channel chan T)。如果您有兴趣,可以阅读提案的Channels 部分。 -
请提供您遇到的编译错误的详细信息和一些相关代码,创建a Minimal, Reproducible Example供参考。