在提供的代码片段中,使用 make() 函数创建通道 c 并将其传递给 sum 函数。问题出现了:即使没有创建显式指针,Go 中的通道是否通过引用隐式传递?
答案在于 make() 的独特行为。从技术上讲,通道是被复制的,因为 make() 在堆上分配内存,在幕后创建一个指针。然而,这个指针类型并没有公开,类似于引用类型。
根据 Go 规范:
“内置函数 make 接受类型 T,该类型必须是切片,映射或通道类型,可选地后跟特定于类型的表达式列表。它返回 T 类型的值(不是 *T)。”
通过使用 make(),通道被初始化,从而允许它用作参考类型。因此,它可以在不复制底层数据的情况下进行传递。
总之,当使用 make 创建时,Go 中的通道实际上是通过引用传递的。这适用于其他数据结构,例如切片、映射、指针和函数。另一方面,原始数据类型(数字、布尔值)和可变结构在传递给函数时会被复制。
以上是Go 中的通道是通过引用传递的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!