Mengambil dan Menyimpan Jejak Tindanan Panik
Apabila panik berlaku dalam atur cara Go, jejak tindanan yang menyediakan maklumat penyahpepijatan yang berharga dicetak secara automatik ke keluaran standard. Walau bagaimanapun, apabila pulih daripada panik, recover() hanya mengembalikan rentetan ralat yang menunjukkan punca panik.
Ini menimbulkan persoalan sama ada mungkin untuk menyimpan surih tindanan yang dicetak untuk analisis lanjut.
Penyelesaian: Menggunakan Pakej Runtime/Debug
Untuk menangani isu ini, kami boleh memanfaatkan pakej runtime/debug. Dengan membungkus kod kami dalam fungsi tertunda yang memanggil recover(), kami boleh menangkap panik dan mengakses surih tindanan menggunakan nyahpepijat.Stack().
Di bawah ialah contoh coretan kod yang mempamerkan pendekatan ini:
package main import ( "fmt" "runtime/debug" ) func main() { defer func() { if r := recover(); r != nil { fmt.Println("stacktrace from panic: \n" + string(debug.Stack())) } }() var mySlice []int j := mySlice[0] fmt.Printf("Hello, playground %d", j) }
Apabila dijalankan, kod ini akan mengeluarkan surih tindanan berikut apabila panik:
stacktrace from panic: goroutine 1 [running]: runtime/debug.Stack(0x1042ff18, 0x98b2, 0xf0ba0, 0x17d048) /usr/local/go/src/runtime/debug/stack.go:24 +0xc0 main.main.func1() /tmp/sandbox973508195/main.go:11 +0x60 panic(0xf0ba0, 0x17d048) /usr/local/go/src/runtime/panic.go:502 +0x2c0 main.main() /tmp/sandbox973508195/main.go:16 +0x60
Surih tindanan ini menyediakan paparan terperinci rantai panggilan fungsi yang membawa kepada panik, menjadikannya lebih mudah untuk menentukan punca ralat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap dan Menyimpan Jejak Tindanan Panik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!