package main
import "fmt"
type trace struct{}
func main() {
slice := make([]string, 2, 4)
var t trace
t.Example(slice, "hello", 10)
}
func (t *trace) Example(slice []string, str string, i int) {
fmt.Printf("Receiver Address: %p\n", t)
panic("Want stack trace")
}
Example函数的声明中,它有三个参数,一个字符串slice,一个字符串和一个整数。它的方法体也很简单,只有一行,抛出一个panic,这会产生一个堆栈跟踪信息,也就是当前Panic的堆栈信息:
堆栈信息方法中的0x1157c08是Receiver Address的值。
对于[]string类型的参数。slice是引用类型,这意味着那个值是一个指针的头信息(header value),它指向一个字符串。对于slice,它的头是三个word数,指向一个数组。因此0xc420043f38,0x2,0x4代表这个slice。
第5个和第6个参数代表字符串的参数。0x10c0224是指向这个字符串底层数组的指针,0x5是"hello"字符串的长度.
参数0xa是10,代表example中的第三个参数。
本文通过一个简单的Go语言示例代码来展示如何使用panic产生堆栈跟踪信息。该示例包含了一个名为Example的方法,该方法接受一个字符串切片、一个字符串和一个整数作为参数,并在方法体内引发panic。
697

被折叠的 条评论
为什么被折叠?



