首頁 > 後端開發 > Golang > Go如何像C/C的__FILE__和__LINE__巨集一樣存取原始檔案資訊?

Go如何像C/C的__FILE__和__LINE__巨集一樣存取原始檔案資訊?

Susan Sarandon
發布: 2024-12-04 11:28:10
原創
356 人瀏覽過

How Does Go Access Source File Information Like C/C  's __FILE__ and __LINE__ Macros?

在Go 中存取來源檔案資訊

在C/C 等語言中, __FILE__ 和__LINE__ 巨集可以輕鬆存取目前檔案和行號。 Go 是否提供了類似的機制?

答案:

是的,Go 為此提供了 runtime.Caller 函數。它傳回指向呼叫堆疊中的呼叫者幀的 uintptr 變數切片。然後可以使用 fmt.Sprintf 函數從幀中提取來源檔案名稱和行號資訊。

import (
    "fmt"
    "runtime"
)

func main() {
    // Get the caller function information
    frames := runtime.Callers(1, 2)

    // Extract the source file name and line number
    fileName, line := getFileInfo(frames[0])
    fmt.Printf("Source file: %s, Line number: %d", fileName, line)
}

// Function to extract file name and line number from caller frame
func getFileInfo(f uintptr) (string, int) {
    // Extract the file name
    frame := runtime.Frame(f)
    return frame.File, frame.Line
}
登入後複製

此外,runtime.Caller 還可以提供呼叫函數的來源檔案資訊:

// Get the caller function information
frames := runtime.Callers(2, 3) // Skip the main function and runtime.Callers

// Extract the source file name and line number
fileName, line := getFileInfo(frames[0])
fmt.Printf("Source file: %s, Line number: %d", fileName, line)
登入後複製

以上是Go如何像C/C的__FILE__和__LINE__巨集一樣存取原始檔案資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板