切片越界

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的状况

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

多个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