Go Stack Trace

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值