Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menangani Panik dalam Kegagalan MGO DialWithTimeout() Go?

Bagaimana untuk Menangani Panik dalam Kegagalan MGO DialWithTimeout() Go?

Linda Hamilton
Lepaskan: 2024-11-24 17:39:18
asal
319 orang telah melayarinya

How to Handle Panic in Go's MGO DialWithTimeout() Failure?

Mengendalikan Panik dalam MGO Go: DialWithTimeout() Failure

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

Dalam kod yang disemak ini:

  • Blok penangguhan kini secara eksplisit memanggil recover() dan mengendalikan nilai pulih (panik) sebagai ralat. Pemulihan panik ini menghalang program daripada keluar.
  • Fungsi DialWithTimeout dipanggil dengan hos dan port MongoDB yang betul (dalam contoh ini, localhost:27017).
  • Atur cara mencetak mesej untuk menunjukkan sama ada ia berjaya disambungkan kepada MongoDB atau tidak.

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!

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