首頁 >後端開發 >Golang >如何在運行時取得 Go 函數的名稱?

如何在運行時取得 Go 函數的名稱?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 14:58:13140瀏覽

How Can I Get a Go Function's Name at Runtime?

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

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