切片越界
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。