关于golang:golang常见错误

10次阅读

共计 714 个字符,预计需要花费 2 分钟才能阅读完成。

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("*****")
}()

正文完
 0