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
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 <- 1defer func() { fmt.Println("*****")}()