使用make创建频道



有没有任何情况下我可以在不使用make创建通道的情况下使用通道,或者我应该始终使用make创建它?

这也适用于贴图和切片吗?

有没有任何情况下我可以使用通道而不使用make 创建它

通常情况下,应根据规范使用make创建通道:

可以使用内置函数make 生成新的初始化通道值

但是,在某些情况下nil通道是有用的。规范规定:

零通道永远无法进行通信。

在某些情况下,这可能会有所帮助(有关通道awaitRequest故意设置为nil的示例,请参阅此答案(。所以,从技术上讲,你可以;使用通道而不使用make创建它;。

这也适用于贴图和切片吗?

否-这里有一些替代方案(操场(:

var m map[int]int
fmt.Println(m[1]) // Note that you cannot add elements to a nil map
m1 := map[int]int{}
m1[1] = 2
m2 := map[int]int{1: 2}
fmt.Println(m2[0])
var s []int
fmt.Println(append(s, 1)) // Nil map is empty but you can append
s1 := []int{}
fmt.Println(append(s1, 2))
s2 := []int{1}
fmt.Println(s2[0])

最新更新