切片越界

func main() {
    // 捕获异常
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()
    //panic 1.切片越界,下面的会panic!
    arr := make([]int, 2)
    arr[2] = 5
    fmt.Println(arr)
}

运行结果

runtime error: index out of range [2] with length 2

重复关闭chan

func main() {
    //2.重复关闭 chan
    c := make(chan int)
    close(c)
    close(c)
}

运行结果

panic: close of closed channel

已经关闭的chan继续发送

func main() {
    //3.已经关闭的chan 继续发送数据
    d := make(chan int)
    close(d)
    d <- 1
}

运行结果

panic: send on closed channel

空指针的情况,定义的指针变量没有初始化,就直接使用

func main() {
    //4.空指针的情况,定义的指针变量没有初始化,就直接使用
    var p *people
    fmt.Println(p.printName)
}
type people struct {
    Name string
    Age  int
}

func (p people) printName() {
    fmt.Println(p.Name)
}

运行结果

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x12cb491]

定义的map没有初始化就直接使用

func main(){
//5. map 没有初始化直接使用
    var m map[int]string
    m[0] = "111"
}

运行结果

panic: assignment to entry in nil map

常见的错误但是不是panic的情况

数组越界 在程序运行就爆红了

image.png

多个groutine 读写 map

func main() {
    //多个groutine 读写 map, 产生 fatal error: concurrent map writes, 而不是 panic
    m := make(map[int]string)
    go func() {
        m[1] = "111"
    }()
    go func() {
        m[1] = "111"
    }()
    fmt.Println(m)

运行结果

fatal error: concurrent map writes

自由自在像小鸟
4 声望1 粉丝