如何在 Go 中擷取函數名稱
通常需要在執行時取得 Go 中函數的名稱。這對於調試、日誌記錄或其他元編程任務非常有用。
runtime.FuncForPC:原生解決方案
Go 提供了一個內建函數,運行時。 FuncForPC,可以根據給定的 PC(程式計數器)位址檢索函數的名稱。但是,它需要反射來獲取 PC 位址,這可能很麻煩。
一種簡化的方法
為了簡化過程,使用反射和運行時的簡單解決方案。 FuncForPC 可實現:
package main import ( "fmt" "reflect" "runtime" ) func foo() { } func GetFunctionName(i interface{}) string { return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() } func main() { fmt.Println("name:", GetFunctionName(foo)) }
此函數接受通用介面參數 i 並傳回與此參數關聯的函數的名稱 介面。在本例中,foo 是正在檢索名稱的函數。
用法範例
以下範例示範了GetFunctionName 函數的用法:
package main import ( "fmt" ) func foo() { } func main() { fmt.Println("name:", GetFunctionName(foo)) }
當你執行這個程式時,它會輸出:
name: foo
這確認GetFunctionName 函數成功檢索foo 函數的名稱。
以上是如何在運行時取得 Go 函數的名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!