Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menangani Ralat 'Tiada Pelayan Boleh Dicapai' dalam Perpustakaan MGO Go?

Bagaimanakah Saya Boleh Menangani Ralat 'Tiada Pelayan Boleh Dicapai' dalam Perpustakaan MGO Go?

DDD
DDDasal
2024-11-24 11:35:15676semak imbas

How Can I Gracefully Handle

Pengendalian Panik dalam Go: Mengendalikan "Tiada Pelayan Boleh Dicapai" dalam MGO

Program In Go menggunakan perpustakaan MGO untuk menyambung ke MongoDB, menghadapi ralat "tiada pelayan boleh dicapai" boleh menyebabkan program panik dan keluar secara tiba-tiba. Untuk membenarkan program meneruskan pelaksanaan walaupun tanpa ketersambungan MongoDB, adalah penting untuk pulih daripada panik ini dengan anggun.

Dalam kod yang disediakan, fungsi recover() digunakan untuk menangkap panik. Walau bagaimanapun, pelaksanaan semasa tidak mencukupi, kerana panik masih membawa kepada penamatan program. Untuk membetulkannya, versi kod yang diubah suai dibentangkan di bawah:

package main

import (
    "fmt"
    "time"
)

import (
    "labix.org/v2/mgo"
)

func connectToMongo() bool {
    ret := false
    fmt.Println("enter main - connecting to mongo")

    // Defer and recover from potential 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 dikemas kini ini, fungsi recover() dipanggil dalam blok tangguh, memastikan ia dilaksanakan sebelum fungsi kembali. Jika panik berlaku dalam fungsi connectToMongo(), fungsi recover() menangkapnya dan mencetak mesej panik. Ini membenarkan atur cara untuk terus melaksanakan, dan bukannya ditamatkan lebih awal.

Dengan mengikuti teknik ini, adalah mungkin untuk mengendalikan ralat "tiada pelayan boleh dicapai" dengan anggun dalam MGO, membenarkan atur cara untuk terus beroperasi walaupun MongoDB tidak tersedia .

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangani Ralat 'Tiada Pelayan Boleh Dicapai' dalam Perpustakaan MGO Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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