首頁 >後端開發 >Golang >如何取得Go程式碼中目前的函數名稱?

如何取得Go程式碼中目前的函數名稱?

Susan Sarandon
Susan Sarandon原創
2024-12-15 08:45:14743瀏覽

How Can I Get the Current Function Name in Go Code?

內省 Go 程式碼:擷取目前函數名稱

在 Go 中,取得目前函數名稱對於除錯和追蹤至關重要。 gcc 中的 FUNCTION 巨集提供了這個功能,我們的目標是在 Go 中模擬它。

解決方案

關鍵在於運行時包。這是一個解決方案:

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.Callers(2, pc)
    f := runtime.FuncForPC(pc[0])
    file, line := f.FileLine(pc[0])
    fmt.Printf("%s:%d %s\n", file, line, f.Name())
}

這個函數的工作原理是:

  1. 取得程式計數器(PC):我們使用runtime.Callers來檢索PC當前函數和呼叫堆疊幀。我們指定深度為2來跳過追蹤函數本身。
  2. 檢索函數詳細資料:使用runtime.FuncForPC,我們檢索與PC對應的Func物件。該物件提供對函數名稱、行號和檔案名稱的存取。
  3. 列印函數資訊:最後,我們印出函數的檔案名稱、行號和名稱。

更新的範例

對於 Go 版本 1.7 ,建議的方法是使用runtime.CallersFrames而不是runtime.FuncForPC。以下是更新的範例:

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10) // Need at least 1 entry
    runtime.CallersFrames(2, pc)
    frame, _ := runtime.CallersFrames(2, pc)
    fmt.Printf("%s:%d %s\n", frame[0].File, frame[0].Line, frame[0].Function)
}

以上是如何取得Go程式碼中目前的函數名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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