今年学习了一下 go stack,就是怎么看go panic 之后打印的堆栈信息
学习的网址:https://www.ardanlabs.com/blog/2015/01/stack-traces-in-go.html
归纳总结几点我觉得有用的:
1. go stack 打印的函数参数地址和真正的函数声明的参数不是一一对应的
2. 对于int, 或者bool这些,只用一个字节
3. 对于string, 两个字节,第一个字节是string的指针地址,第二个字节是string的长度
4.对于切片,用三个字节,第一个字节是指针地址,第二个是长度,第三个是容量
5. 对于函数有接受者的,比如 func(s * Struct) method() 这种的,第一个是指针地址,就是s的地址
6. 有时候会package(打包),就是比如参数是 三个bool 和一个uint,他们都占8bit,会打包成32bit的字节,就是四个参数用一个字节表示
感觉学习了这个之后,再去分析panic的原因会有一点帮助