大家好,我是煎鱼。 平时在日常工程中,我们常常会用到异常恐慌(panic)的记录和追踪。最常见的就是,线上 panic 了之后,我们总想从中找到一些蛛丝马迹。 我们很多人是看 panic 是看他的调用堆栈。然后就开始猜,看代码。猜测是不是哪里写的有问题,就想知道 panic 是由什么参数引起的? 因为知道了诱发的参数,排查问题就非常方便了。为此在 Go1.17,官方对这块的调用堆栈信息展示进行了优化,使其可读性更友好。 案例 结合我们平时所使用的 panic 案例。如下: func main() { example(make([]string, 1, 2), "煎鱼", 3) } //go:noinline func example(slice []string, str string, i int) error { panic("脑子进煎鱼了") } 运行结果: