Go 中不同运行时类型的通用容器
本文解决了通过通道将数据传输到将进一步处理的 goroutine 的挑战它要求通道处理所有类型。我们研究了 Go 1.18 中引入的泛型的使用来满足这一需求。
定义通用容器
目标是创建一个接受任何数据类型的通用通道。然而,我们最初使用泛型的努力遇到了编译错误,因为无法在没有特定类型的情况下实例化泛型通道。
使用接口{}而不是泛型
一种可能的解决方案是用可以保存任何数据值的 interface{} 类型替换泛型。然而,这种方法在处理复杂的嵌套结构时会带来复杂性和解析挑战。
理解泛型
问题源于对泛型在这种情况下的预期用法的误解。虽然我们可能希望有一个可以接受任何类型的通道,但这通过通用通道是无法实现的。
泛型的正确使用
一般来说,在处理泛型时,我们定义一个像 chan T 这样的参数化类型,并在使用它之前用具体的类型参数实例化它。例如,我们将创建一个具体通道,如下所示:
c := make(chan int)
动态数据类型的解决方案
要处理运行时数据类型变化,我们可以使用通道以 interface{} 作为其类型:
c := make(chan interface{})
在这种情况下,我们将数据发送到通道并执行类型断言或其他处理处理不同的数据类型。
以上是Go 泛型如何处理通道中不同的运行时数据类型?的详细内容。更多信息请关注PHP中文网其他相关文章!