定义一个chan变量是不是不能用 var 关键字来定义
来源:11-4 用select进行调度

椰子树
2020-06-02
比如,我在编辑器上 输入 var c chan int 这样是不会报错的,但是却无法往这个 c 传入任何数值
如果 c:= make(chan int) 这样就可以,我想问下,为啥定一个chan变量只能用make,以及,make和var的区别是什么,为什么编辑器对 var c chan int 这种不报错,因为这种的 c 是不能使用的,求老师解答下这三个问题
写回答
1回答
-
ccmouse
2020-06-03
var c chan int是定义了这个c的类型是chan int,但是c的值是nil。这句话本身是没有语法错误的,只是往nil channel是无法传入数值的。nil channel也是有一定作用的,在本节中nil channel配合select来使用,产生无法选择到的分支。我们在var c chan in后,也可以说c=make(chan int),注意这里必须用=而不是:=那样这个c就是一个正常的channel了。
那么c:=make(chan int),是定义变量c,它的初始值就是make(chan int)做出来的这个channel,它的类型由编译器推测,推测的结果就是can int。也就是说这样相当于:
var c chan int
c=make(chan int)
112020-08-01
相似问题