channel常见错误
1.向一个channel发送一个nil,编译是可以通过,运行的时候会报错。
ch := make(chan int)
ch <- nil
运行的时候会提醒 cannot use nil as type int in send 错误。
2.channel的len和cap有区别的。
ch := make(chan int,) //无缓冲的通道又称为阻塞的通道,默认长度len为0,容量cap为0。
fmt.Println("len", len(ch))
fmt.Println("cap", cap(ch))
ch2 := make(chan int,1) //创建一个容量为1的有缓冲区通道,长度len为0,容量cap为1。
fmt.Println("len", len(ch2))
fmt.Println("cap", cap(ch2))
3.向一个关闭的channel发送数据,会引起panic错误。
ch := make(chan int,1)
fmt.Println("len", len(ch))
fmt.Println("cap", cap(ch))
close(ch)
ch <- 1
4.关闭一个已经关闭的channel,会引起panic错误。
ch := make(chan int,) //无缓冲的通道又称为阻塞的通道,默认长度len为0,容量cap为0。
fmt.Println("len", len(ch))
fmt.Println("cap", cap(ch))
close(ch)
close(ch)
ch <- 1
defer常见错误
1.panic之后的代码都不会再执行,包括defer函数。
defer func() {
if err := recover();err != nil{
fmt.Println("test")
}
}()
ch := make(chan int,) //无缓冲的通道又称为阻塞的通道,默认长度len为0,容量cap为0。
fmt.Println("len", len(ch))
fmt.Println("cap", cap(ch))
close(ch)
ch <- 1
defer func() {
fmt.Println("*****")
}()
map
1.删除 map 不存在的键值对时,不会报错,相当于没有任何作用;获取不存在的减值对时,返回值类型对应的零值,所以返回 0。
s := make(map[string]int)
delete(s,"h")
fmt.Println(s["h"])
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。