eddycjy/go-programming-tour-book-comments

附录 D:让 Go panic 的十种方法 | Go 语言编程之旅

utterances-bot opened this issue · 2 comments

附录 D:让 Go panic 的十种方法 | Go 语言编程之旅

附录 D:让 Go panic 的十种方法 本章节有且仅有一个目的,那就是让你的 Go 程序遇到 panic。
D.1 数组/切片索引越界 func main() { names := []string{ "煎鱼", "eddycjy", "Go 语言编程之旅", } name := names[len(names)] fmt.Printf("name: %s", name) } 运行结果:
panic: runtime error: index out of range [3] with length 3 goroutine 1 [running]: main.main() /Users/eddycjy/go-application/awesomePanic/main.go:11 +0x1b D.2 空指针调用 type User struct { Name string } func

https://golang2.eddycjy.com/posts/appendix/04-go-panic/

文中有3个问题
D.2 空指针调用不用引起panic 这里判断是因为u为nil 所以不能使用u.Name 但是u.GetName() 调用是不会panic的
D.3 跟D.2是一个问题 是错误的内存地址 不应该单独列出httpBody这个例子
D.9 和D.4 重复 D.9也是因为除以0 才panic. 你这里表达的是recover只能cover当前协程内panic

确实,nil调用方法是可以的,但是不能读取结构体内的字段,可以吧GetName的内容改成go return "tony"再跑,不会触发Panic