Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 1.54 KB

panic.md

File metadata and controls

31 lines (21 loc) · 1.54 KB

go语言常见的panic方式

这篇文章主要是对golang常见的panic进行总结,在go的开发当中注意这些场景,并对其进行检查,通常程序就不会panic掉。

空指针panic 在使用一个指针类型的变量时,如果变量未初始化,使用指针会导致panic,这类场景比较难处理,如果针对每个变量进行判断的话最终写出来的程序会非常难看,所以这种情况,如果指针是通过调用函数返回的,如果没有error类型返回,通常我会认为返回的指针是初始化了的,如果有error返回,那么如果error不为空,同样我也认为指针已经进行了初始化。

slice 越界 在通过下标使用slice之前一定要对slice的长度进行判断,即使觉得一定不会越界,添加一个判断没有太复杂,但是不加判断造成的panic会很严重。

interface断言 在拿到一个interface类型时,会对其进行断言,比如 expectedType := obj.(*ExpectedType),可能会造成panic,通常这种情况需要使用ok进行判断.

expectedType, ok := obj.(*ExpectedType)
if !ok {
    return
}

往close的channel发送数据 往close的channel发送数据时,会造成程序panic,通常我不会显式的关闭channel,在不使用是让runtime自动进行回收。

close一个已经close的channel channel重复close会导致panic

map并发读写 golang中的map采用的是哈希表实现,在对哈希表进行并发读写操作时,如果不加锁所会造成panic。

待补充。。。