在 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中文網其他相關文章!