定义一个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)

1
1
EnzoLiu
是不是可以这样理解: var c chan int 类型是chan int 值为nil 而 c:=make(chan int) 类型是chan int,值为make(chan int)做出的一个channel 表面来看尽管类型一样,但值不一样,意义不一样
2020-08-01
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程