Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Mengakses Maklumat Fail Sumber Seperti Makro __FILE__ dan __LINE__ C/C?

Bagaimanakah Go Mengakses Maklumat Fail Sumber Seperti Makro __FILE__ dan __LINE__ C/C?

Susan Sarandon
Susan Sarandonasal
2024-12-04 11:28:10283semak imbas

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

Mengakses Maklumat Fail Sumber dalam Go

Dalam bahasa seperti C/C , makro __FILE__ dan __LINE__ menyediakan akses mudah kepada fail semasa dan nombor baris. Adakah Go menawarkan mekanisme yang serupa?

Jawapan:

Ya, Go menyediakan masa jalan. Fungsi pemanggil untuk tujuan ini. Ia mengembalikan sepotong pembolehubah uintptr yang menunjuk ke bingkai pemanggil dalam timbunan panggilan. Fungsi fmt.Sprintf kemudiannya boleh digunakan untuk mengekstrak nama fail sumber dan maklumat nombor baris daripada bingkai.

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
}

Selain itu, masa jalan.Pemanggil juga boleh memberikan maklumat fail sumber untuk fungsi panggilan:

// 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)

Atas ialah kandungan terperinci Bagaimanakah Go Mengakses Maklumat Fail Sumber Seperti Makro __FILE__ dan __LINE__ C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn