golang channel长度相关以及正确判空的方式

golang channel关于len的笔记

在golang中len用来计算一个数据结构的长度,这个和在c++、python中是一样的,但是另外两种语言是没有channel这种数据类型的,那么在golang中len(channel)表示什么呢?直接上代码检测

1
2
3
4
5
6
7
8
9
10
11
12
13
package main
import (
"fmt"
)
func main() {
c := make(chan int,2)
fmt.Println(len(c))
c <- 1
c <- 2
fmt.Println(len(c))
}

0

2

可以看到数据结果分别是0,2,所以可以确定的是len计算的是channel里面元素的数量,这里需要额外提的一点是golang里面channel的使用一定要事先使用make进行内存分配,类似于C语言里面buffer使用之前必须malloc,所以对于只有声明没有make的channel使用len求值的结果仍然是0,因此判断一个channel是否malloc的方法应该是使用nil,同样不要向一个nil的channel里面写数据,会一直阻塞,也不要向一个close的channel写数据会直接pannic,关于channel的底层实现golang里面是指针,因此在作为函数参数传参的时候也并不会复制创建一个channel而是类似于传指针,这个以后有机会说:)