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

Mary-Kate Olsen
Lepaskan: 2024-11-25 21:09:11
asal
125 orang telah melayarinya

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

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

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

Ini membolehkan anda membandingkan ralat dengan pembolehubah yang dieksport:

if err == somepackage.ErrExample {
    // handle it
}
Salin selepas log masuk

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

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!

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