在 Golang 中,可以深入了解呼叫者函數。考慮以下程式碼片段:
func foo() { // Do something } func main() { foo() }
問題出現了:我們如何確定 foo 是從 main 呼叫的?其他語言(例如 C#)使用 CallerMemberName 等屬性來簡化此任務。
值得慶幸的是,Golang 提供了帶有 runtime.Caller 函數的解決方案。
func Caller(skip int) (pc uintptr, file string, line int, ok bool)
範例#1:列印呼叫者檔案名稱與行Number
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:使用runtime.FuncForPC
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 中的呼叫函數資訊。
以上是Golang中如何取得呼叫者函數資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!