Rumah > pembangunan bahagian belakang > Golang > Bagaimana Saya Boleh Mendapatkan Nama Fungsi Semasa dalam Go?

Bagaimana Saya Boleh Mendapatkan Nama Fungsi Semasa dalam Go?

Patricia Arquette
Lepaskan: 2024-12-30 13:02:13
asal
173 orang telah melayarinya

How Can I Get the Current Function Name in Go?

Mendapatkan Nama Fungsi Semasa dalam Go

Untuk mengesan aliran pelaksanaan program Go, mungkin wajar untuk mengetahui nama fungsi semasa. Ini berguna untuk tujuan penyahpepijatan atau pengelogan.

Untuk mendapatkan nama fungsi semasa dalam Go, seseorang boleh menggunakan fungsi runtime.FuncForPC, yang mengambil pembilang program (PC) sebagai hujahnya dan mengembalikan fungsi yang sepadan objek. Berikut ialah contoh cara ini boleh digunakan:

package main

import (
    "fmt"
    "runtime"
)

func trace() {
    pc := make([]uintptr, 10)  // at least 1 entry needed
    runtime.Callers(2, pc)
    f := runtime.FuncForPC(pc[0])
    file, line := f.FileLine(pc[0])
    fmt.Printf("%s:%d %s\n", file, line, f.Name())
}

func main() {
    trace()
}
Salin selepas log masuk

Apabila dilaksanakan, program ini akan mencetak output berikut:

/path/to/file.go:13 trace
Salin selepas log masuk

Output ini menunjukkan bahawa fungsi surih dipanggil dalam talian 13 fail file.go.

Nota: Dalam Go versi 1.7 dan lebih baru, adalah disyorkan untuk menggunakan runtime.CallersFrames bukannya runtime.FuncForPC. Contoh yang dikemas kini menggunakan runtime.CallersFrames adalah seperti berikut:

package main

import (
    "fmt"
    "runtime"
)

func trace() {
    pcs := make([]uintptr, 10)
    n := runtime.CallersFrames(2, pcs)
    frames := runtime.CallersFrames(n)
    frame, _ := frames.Next()
    fmt.Printf("%s:%d %s\n", frame.File, frame.Line, frame.Function)
}

func main() {
    trace()
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mendapatkan Nama Fungsi Semasa 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan