您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    如何在Go的函数中失掉调用者函数名?(2)
    时间:2018-11-05 21:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

            fmt.Printf("%s:%d %s\n", frame.File, frame.Line, frame.Function

            if !more { 

                break 

            } 

        } 

    4、func FuncForPC(pc uintptr) *Func

    FuncForPC 是一个幽默的函数, 它可以把顺序计数器地址对应的函数的信息获取出来。假设由于内联顺序计数器对应多个函数,它前往最外面的函数。

    它的前往值是一个*Func类型的值,经过*Func可以取得函数地址、文件行、函数名等信息。

    除了下面获取顺序计数器的方式,也可以经过反射的方式获取函数的地址:

    runtime.FuncForPC(reflect.ValueOf(foo).Pointer()).Name() 

    5、获取顺序堆栈

    在顺序panic的时分,普通会自动把堆栈打出来,假设你想在顺序中获取堆栈信息,可以经过debug.PrintStack()打印出来。比如你在顺序中遇到一个Error,但是不希冀顺序panic,只是想把堆栈信息打印出来以便跟踪调试,你可以运用debug.PrintStack()。

    抑或,你本人读取堆栈信息,本人处置和打印:

    func DumpStacks() { 

        buf := make([]byte, 16384) 

        buf = buf[:runtime.Stack(buf, true)] 

        fmt.Printf("=== BEGIN goroutine stack dump ===http://developer.51cto.com/art/201811/\n%s\n=== END goroutine stack dump ===", buf) 

    参考 调试利器:dump goroutine 的 stacktrace。

    应用堆栈信息还可以获取goroutine的id, 参考: 再谈谈获取 goroutine id 的办法

    func GoID() int { 

        var buf [64]byte 

        n := runtime.Stack(buf[:], false

        idField := strings.Fields(strings.TrimPrefix(string(buf[:n]), "goroutine "))[0] 

        id, err := strconv.Atoi(idField) 

        if err != nil { 

            panic(fmt.Sprintf("cannot get goroutine id: %v", err)) 

        } 

        return id 

    【编辑引荐】

    简化Django开发的八个Python包

    你没听说过的 Go 言语惊人优点

    带你了解五种减速Go的特性和如何完成它们

    Go开发者平均年薪46万?爬数据展现国际Go的市场行情究竟如何

    Google力推的那些前端技术有何停顿?

    (责任编辑:admin)