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