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

Bagaimana Saya Boleh Dapatkan Maklumat Pemanggil dalam Go?

DDD
Lepaskan: 2024-12-20 13:21:14
asal
745 orang telah melayarinya

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()
}
Salin selepas log masuk

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)
Salin selepas log masuk

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()
}
Salin selepas log masuk

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()
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan