Pertimbangkan situasi berikut: anda mempunyai fungsi Go yang bersambung ke contoh MongoDB menggunakan perpustakaan mgo. Walau bagaimanapun, anda ingin mengendalikan kes di mana MongoDB tidak tersedia tanpa ranap program.
Kod asal cuba mencapai ini dengan menggunakan mekanisme tangguh/pulihkan. Namun, keadaan panik masih menyebabkan program itu terkeluar. Mari kita teroka pendekatan yang disemak:
package main import ( "fmt" "time" ) import ( "labix.org/v2/mgo" ) func connectToMongo() bool { ret := false fmt.Println("enter main - connecting to mongo") // Handle panic defer func() { if r := recover(); r != nil { fmt.Println("Detected panic") var ok bool err, ok := r.(error) if !ok { fmt.Printf("pkg: %v, error: %s", r, err) } } }() maxWait := time.Duration(5 * time.Second) session, sessionErr := mgo.DialWithTimeout("localhost:27017", maxWait) if sessionErr == nil { session.SetMode(mgo.Monotonic, true) coll := session.DB("MyDB").C("MyCollection") if (coll != nil) { fmt.Println("Got a collection object") ret = true } } else { // never gets here fmt.Println("Unable to connect to local mongo instance!") } return ret } func main() { if (connectToMongo()) { fmt.Println("Connected") } else { fmt.Println("Not Connected") } }
Dalam kod yang disemak ini:
Dengan melaksanakan mekanisme pengendalian ralat ini, anda boleh menangani situasi di mana MongoDB tidak tersedia tanpa ranap program anda. Ini membolehkan aplikasi anda meneruskan pemprosesan tugas lain atau gagal dengan anggun dengan mesej ralat deskriptif.
Atas ialah kandungan terperinci Bagaimana untuk Menangani Panik dalam Kegagalan MGO DialWithTimeout() Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!