Rumah >pembangunan bahagian belakang >Golang >Mekanisme pengendalian ralat dalam bahasa Go

Mekanisme pengendalian ralat dalam bahasa Go

WBOY
WBOYasal
2023-06-02 15:01:361249semak imbas

Sebagai bahasa pengaturcaraan moden, bahasa Go mempunyai sokongan yang baik untuk mekanisme pengendalian ralatnya adalah jelas dan mudah. ​​Ia bukan sahaja menyediakan kaedah pengendalian ralat standard, tetapi juga menyokong jenis ralat tersuai untuk memudahkan pembangun pengendalian.

1. Gambaran keseluruhan pengendalian ralat

Dalam bahasa Go, pengendalian ralat dianggap sebagai nilai pulangan biasa, yang mudah difahami. Cara yang disyorkan dalam Go adalah untuk fungsi mengembalikan nilai ralat Jika panggilan berjaya, ia mengembalikan nilai sifar. Jika tidak, ia mengembalikan nilai ralat bukan nol, biasanya jenis yang melaksanakan antara muka Ralat.

Go mewakili ralat melalui antara muka ralat terbina dalam ialah antara muka dengan kaedah rentetan Ralat() Selagi jenis itu melaksanakan kaedah rentetan Ralat(), ia boleh dikembalikan sebagai nilai ralat . Contohnya, gunakan fungsi fmt.Errorf() untuk mengembalikan nilai ralat baharu:

func divide(x, y int) (int, error) {
  if y == 0 {
    return 0, fmt.Errorf("division by zero")
  }
  return x / y, nil
}

Pembahagian fungsi di atas mengembalikan dua parameter, yang pertama ialah hasil x/y dan yang kedua ialah nilai ralat , Jika y ialah sifar, nilai ralat baharu dikembalikan. Kita boleh memanggil fungsi ini seperti ini:

res, err := divide(6, 2)
if err != nil {
  fmt.Println(err)
  return
}
fmt.Println("Result is", res)

Perhatikan bahawa apabila kita memanggil fungsi, kita juga menyemak sama ada nilai pulangan kedua adalah nil Jika ia tidak nil, ini bermakna ralat telah berlaku.

Jika kita memerlukan jenis ralat tersuai, kita boleh mencipta jenis yang melaksanakan antara muka ralat:

type myError struct {
  code    int
  message string
}
func (e *myError) Error() string {
  return fmt.Sprintf("Error code %d: %s", e.code, e.message)
}

Kemudian, kita boleh menggunakan jenis ralat baharu ini seperti berikut:

func newMyError() error {
  return &myError{100, "custom error message"}
}

2. Amalan terbaik untuk pengendalian ralat

1 Periksa semua ralat

Dalam Go, adalah satu tabiat pengaturcaraan yang baik untuk menyemak semua fungsi mengembalikan ralat, yang boleh membantu kami mencari dan membetulkan potensi. pepijat untuk memastikan program kami tidak rosak apabila ralat berlaku.

2. Ralat harus mengandungi maklumat yang boleh dibaca

Apabila kami mengembalikan ralat, kami harus menambah maklumat yang boleh dibaca untuk membantu pengguna memahami dengan lebih baik punca ralat itu.

3. Elakkan daripada menggunakan pembolehubah ralat global

Pembolehubah ralat global tidak digalakkan kerana ia mungkin disalahgunakan oleh kod lain yang tidak berkaitan. Sebaliknya, kita harus mengembalikan pembolehubah tempatan dalam fungsi atau kaedah, yang mengelak daripada mendedahkan ralat kepada fungsi lain.

4. Gunakan pernyataan tangguh

Walaupun kami mengembalikan nilai ralat dalam fungsi, kami mungkin masih perlu melakukan beberapa operasi pembersihan, seperti menutup fail atau melepaskan sumber. Untuk memastikan bahawa operasi pembersihan ini sentiasa dilakukan, kami boleh menggunakan pernyataan tangguh.

func myFunc() error {
  f, err := os.Open("file.txt")
  if err != nil {
    return err
  }
  defer f.Close()
  //其他代码
  return nil
}

Walaupun selepas ralat berlaku dalam fungsi dan pulangan, penyataan tangguh akan dilaksanakan sebelum fungsi kembali.

5. Pengendalian ralat tidak seharusnya menghalang pelaksanaan program

Apabila mengendalikan ralat, kita harus memastikan ralat itu tidak memberi kesan negatif terhadap pelaksanaan program, contohnya, jika kami mempunyai ralat semasa menyahkod Ralat JSON, kami boleh menggunakan nilai lalai sebagai ganti.

3. Ringkasan

Mekanisme pengendalian ralat bahasa Go ialah alat yang mudah tetapi berkuasa. Ia menjadikan pengendalian ralat sangat mudah, yang merupakan kelebihan untuk pembangun bahasa Go. Apabila menulis program Go, kita harus menggunakan mekanisme pengendalian ralat secara fleksibel dan menulis kod pengendalian ralat yang baik untuk mengelakkan ranap atau pengecualian selepas ralat program berlaku.

Atas ialah kandungan terperinci Mekanisme pengendalian ralat dalam bahasa 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