Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Membandingkan dan Mengendalikan Ralat dalam Go dengan Berkesan, Tidak seperti GetMessage() Java?

Bagaimanakah Saya Membandingkan dan Mengendalikan Ralat dalam Go dengan Berkesan, Tidak seperti GetMessage() Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-25 21:09:11158semak imbas

How Do I Effectively Compare and Handle Errors in Go, Unlike Java's GetMessage()?

Membandingkan Mesej Ralat dalam Go

Di Java, anda boleh menggunakan GetMessage() untuk mendapatkan semula mesej ralat daripada Exception. Walau bagaimanapun, dalam Go, tiada kaedah yang setara ditakrifkan untuk jenis ralat. Sebaliknya, teknik pengendalian ralat tersuai mesti digunakan.

Pengendalian Ralat Tersuai

Satu pendekatan ialah mentakrifkan pembolehubah peringkat pakej untuk mewakili mesej ralat khusus yang anda mahu semak untuk. Contohnya:

var errExample = errors.New("this is an example")

Apabila mengembalikan ralat, anda boleh menggunakan pembolehubah ini dan bukannya rentetan ralat generik:

if err := some_package.DoSomething(); err != nil {
    if err == errExample {
        // handle it however.
    }
}

Mengeksport Pembolehubah Ralat

Jika kod di luar pakej perlu mengakses ralat, anda boleh mengeksport pembolehubah menggunakan modal letter:

var ErrExample = errors.New("this is an example")

Ini membolehkan anda membandingkan ralat dengan pembolehubah yang dieksport:

if err == somepackage.ErrExample {
    // handle it
}

Contoh

  • Laluan Fail Mutlak: os.ErrNotExist
  • Ralat HTTP: net/http.ErrServerClosed
  • Ralat Pangkalan Data: pangkalan data/sql.ErrNoRows
Perangkap: Elakkan Rentetan Perbandingan

Tahan godaan untuk membandingkan dengan rentetan yang dikembalikan oleh kaedah Ralat() ralat. Ini boleh mengakibatkan kod rapuh. Contohnya:

Sebaliknya, gunakan pendekatan pengendalian ralat tersuai yang digariskan di atas.
if err.Error() == "this is an example" {
    // this is not recommended
}

Atas ialah kandungan terperinci Bagaimanakah Saya Membandingkan dan Mengendalikan Ralat dalam Go dengan Berkesan, Tidak seperti GetMessage() Java?. 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