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中的第三个参数。