首頁 >後端開發 >Golang >如何在 Go 中取得來電者資訊?

如何在 Go 中取得來電者資訊?

DDD
DDD原創
2024-12-20 13:21:14741瀏覽

How Can I Get Caller Information in Go?

在 GoLang 中獲取呼叫者資訊

確定有關 GoLang 中呼叫另一個函數的函數的資訊是否可行?如果從 main() 呼叫了一個函數(例如下面的 foo()),我們如何才能找到?

func foo() {
    // Perform some actions
}

func main() {
    foo()
}

雖然某些語言(例如 C#)提供了諸如 CallerMemberName 屬性之類的功能來檢索此函數數據,GoLang 採用了不同的方法。

解決方案: runtime.Caller

GoLang 提供了 runtime.Caller 函數來取得呼叫者的資訊。其語法如下:

func Caller(skip int) (pc uintptr, file string, line int, ok bool)

範例1:顯示呼叫者檔案名稱和行號

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    _, file, no, ok := runtime.Caller(1)
    if ok {
        fmt.Printf("Called from %s#%d\n", file, no)
    }
}

func main() {
    foo()
}

範例2:使用執行時收集詳細資訊。 FuncForPC

欲了解更全面的信息,您可以將runtime.FuncForPC與runtime.Caller結合使用:

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    pc, _, _, ok := runtime.Caller(1)
    details := runtime.FuncForPC(pc)
    if ok && details != nil {
        fmt.Printf("Called from %s\n", details.Name())
    }
}

func main() {
    foo()
}

以上是如何在 Go 中取得來電者資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn