Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Dapatkan Maklumat Pemanggil dalam Go?

Bagaimana Saya Boleh Dapatkan Maklumat Pemanggil dalam Go?

DDD
DDDasal
2024-12-20 13:21:14705semak imbas

How Can I Get Caller Information in Go?

Mendapatkan Maklumat Pemanggil dalam GoLang

Adakah wajar untuk menentukan maklumat tentang fungsi yang menggunakan fungsi lain dalam GoLang? Jika fungsi, seperti foo() di bawah, dipanggil dari main(), bagaimana kita boleh mengetahuinya?

func foo() {
    // Perform some actions
}

func main() {
    foo()
}

Walaupun sesetengah bahasa, seperti C#, menyediakan ciri seperti atribut CallerMemberName untuk mendapatkan semula ini data, GoLang menggunakan pendekatan yang berbeza.

Penyelesaian: runtime.Caller

GoLang menawarkan fungsi runtime.Caller untuk memperoleh maklumat tentang pemanggil. Berikut ialah sintaksnya:

func Caller(skip int) (pc uintptr, file string, line int, ok bool)

Contoh 1: Memaparkan Nama Fail Pemanggil dan Nombor Talian

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    _, file, no, ok := runtime.Caller(1)
    if ok {
        fmt.Printf("Called from %s#%d\n", file, no)
    }
}

func main() {
    foo()
}

Contoh 2: Mengumpul Maklumat Terperinci dengan masa jalan. FuncForPC

Untuk maklumat yang lebih komprehensif, anda boleh menggunakan runtime.FuncForPC bersamaan dengan runtime.Pemanggil:

package main

import (
    "fmt"
    "runtime"
)

func foo() {
    pc, _, _, ok := runtime.Caller(1)
    details := runtime.FuncForPC(pc)
    if ok && details != nil {
        fmt.Printf("Called from %s\n", details.Name())
    }
}

func main() {
    foo()
}

Atas ialah kandungan terperinci Bagaimana Saya Boleh Dapatkan Maklumat Pemanggil dalam Go?. 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