关于golang:golang常见错误

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 <- 1

defer func() {
    fmt.Println("*****")
}()

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理