Panic in the Go rangka kerja digunakan untuk menimbulkan pengecualian yang tidak boleh dipulihkan, dan Recover digunakan untuk memulihkan daripada Panic dan melakukan operasi pembersihan. Mereka boleh mengendalikan pengecualian seperti kegagalan sambungan pangkalan data, memastikan kestabilan aplikasi dan pengalaman pengguna.
Panic dan Recover ialah dua mekanisme utama dalam rangka kerja Go untuk mengendalikan pengecualian, dan ia boleh memainkan peranan penting dalam proses penyahpepijatan.
Panic ialah kaedah terbina dalam Go yang digunakan untuk mengemukakan pengecualian serta-merta akan menamatkan goroutine yang sedang berjalan dan mencetak maklumat pengecualian. Secara umum, panik hanya boleh digunakan apabila ralat yang tidak dapat dipulihkan ditemui.
Senario penggunaan:
Syntax:
func(parameters) (result, parameters) { // 判断是否需要抛出异常 if (condition) { panic(reason) } return result, parameters }
Recover digunakan untuk pulih daripada panik Ia boleh mendapatkan maklumat pengecualian yang disebabkan oleh panik dan kembali ke proses pelaksanaan.
Senario penggunaan:
Sintaks:
func(parameters) (result, parameters) { defer func() { if err := recover(); err != nil { // 处理 panic 异常 } }() return result, parameters }
Pertimbangkan pelayan web Go mudah yang menggunakan panik untuk mengendalikan ralat kegagalan sambungan pangkalan data:
package main import ( "database/sql" "fmt" "log" "net/http" ) func main() { // 连接数据库 db, err := sql.Open("mysql", "user:password@/database") if err != nil { // 数据库连接失败则抛出 panic panic(err) } // 启动 web 服务器 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // 捕获 panic 并在 Web 响应中显示错误消息 w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("Internal error occurred. Please try again later.")) log.Printf("Panic occurred: %s", err) } }() // 访问数据库并执行查询 rows, err := db.Query("SELECT * FROM users") if err != nil { // 数据库查询失败则抛出 panic panic(err) } // 处理查询结果 // ... }) log.Fatal(http.ListenAndServe(":8080", nil)) }
Dalam contoh di atas, sql.DB
. Jika sambungan gagal, fungsi Open()
akan menimbulkan panik. Fungsi main()
menggunakan tunda
dan recover()
untuk menangkap panik. Open()
函数会连接到数据库并返回一个 sql.DB
实例。如果连接失败,Open()
函数会抛出 panic。main()
函数使用 defer
和 recover()
来捕获 panic。
当 Web 服务器处理请求时,Query()
函数会查询数据库并返回查询结果。如果查询失败,Query()
函数会抛出 panic。recover()
Query()
menanyakan pangkalan data dan mengembalikan hasil pertanyaan. Jika pertanyaan gagal, fungsi Query()
akan menimbulkan panik. Fungsi recover()
akan menangkap panik ini dan menulis mesej ralat pada log. Dengan menggunakan panik dan pulih, aplikasi boleh mengendalikan pengecualian dengan anggun sambil memberikan mesej ralat mesra pengguna. Ini penting untuk memastikan kestabilan aplikasi dan meningkatkan pengalaman pengguna. 🎜Atas ialah kandungan terperinci Aplikasi panik rangka kerja golang dan pemulihan dalam penyahpepijatan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!