Rumah  >  Artikel  >  pembangunan bahagian belakang  >  golang menangani kesilapan dengan anggun

golang menangani kesilapan dengan anggun

PHPz
PHPzasal
2023-05-10 18:22:07639semak imbas

Golang ialah bahasa pengaturcaraan yang terkenal dengan kecekapan dan kesederhanaannya, dan mekanisme pengendalian ralatnya juga telah mendapat perhatian dan perbincangan yang meluas. Di Golang, ralat dianggap sebagai peristiwa yang boleh dikendalikan, dan beberapa kaedah pengendalian ralat yang unik dan elegan digunakan. Artikel ini akan memperkenalkan cara menggunakan pengendalian ralat elegan Golang untuk meningkatkan kualiti kod dan kebolehselenggaraan kod.

  1. Takrif jenis ralat

Dalam Golang, ralat ialah jenis data yang mengandungi maklumat ralat, biasanya diwakili oleh jenis ralat. Jenis ralat terbina dalam Golang ialah jenis antara muka dengan hanya satu kaedah Ralat(), yang digunakan untuk mengembalikan maklumat ralat. Kami boleh melaksanakan antara muka ralat melalui jenis tersuai untuk menerangkan maklumat ralat khusus dan operasi yang sepadan dengan lebih baik.

Sebagai contoh, semasa memproses operasi membaca fail, kami boleh mentakrifkan jenis ralat berikut:

type FileReadError struct {
    Filename string
    Err      error
}

func (e *FileReadError) Error() string {
    return fmt.Sprintf("Error reading file %s: %v", e.Filename, e.Err)
}

Jenis ralat ini mengandungi nama fail dan maklumat ralat untuk membaca fail, dengan melaksanakan Ralat() Kaedah yang mengembalikan perihalan rentetan ralat.

  1. Reka bentuk fungsi pengendalian ralat

Di Golang, ralat dianggap sebagai sebahagian daripada aliran pemprosesan berstruktur biasa. Kami biasanya menggunakan pernyataan if dan pembolehubah ralat untuk mengesan ralat yang dikembalikan oleh fungsi dan mengambil tindakan yang sesuai. Melakukannya memberikan kami kawalan yang lebih baik ke atas aliran program dan mengendalikan ralat dengan sewajarnya.

Untuk memudahkan pengendalian ralat, kami boleh mereka bentuk nilai pulangan fungsi sebagai jenis ralat, dan apabila fungsi itu dilaksanakan, kembalikan nilai jenis ralat untuk menunjukkan sama ada ralat berlaku.

Sebagai contoh, apabila membaca fail, kita boleh mentakrifkan fungsi membaca fail berikut:

func ReadFile(filepath string) ([]byte, error) {
    data, err := ioutil.ReadFile(filepath)
    if err != nil {
        return nil, &FileReadError{Filename: filepath, Err: err}
    }
    return data, nil
}

Apabila membaca fail, fungsi ini akan mengembalikan kandungan fail baca dan maklumat ralat . Jika ralat berlaku semasa membaca fail, nilai jenis FileReadError tersuai akan dikembalikan dan maklumat ralat khusus akan disimpan dalam medan Err.

Apabila memanggil fungsi ini, kita boleh menggunakan pernyataan if untuk mengesan sama ada ralat telah berlaku dan mengambil tindakan yang sesuai:

data, err := ReadFile("test.txt")
if err != nil {
    log.Fatal(err)
}

Kaedah ini boleh memudahkan kod dan meningkatkan kebolehbacaan atur cara. dan kebolehselenggaraan.

  1. Memproses dan memaparkan maklumat ralat

Di Golang, maklumat ralat biasanya diformat dan dikeluarkan melalui fungsi dalam pakej fmt. Kami boleh mengeluarkan maklumat ralat terperinci dan maklumat konteks ralat dengan memformatkan output.

Sebagai contoh, dalam contoh di atas, kita boleh mengeluarkan mesej ralat dengan cara berikut:

func main() {
    data, err := ReadFile("test.txt")
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println("File content:", string(data))
}

Output mesej ralat dengan cara ini akan termasuk mesej ralat khusus dan maklumat nama fail bagi membaca fail.

Selain mengeluarkan maklumat ralat, kami juga boleh menyediakan konteks yang lebih baik dengan membungkus maklumat ralat. Sebagai contoh, kita boleh menentukan fungsi pembantu yang menjana maklumat ralat yang lebih kaya apabila ralat berlaku dan mengembalikan maklumat ralat sebagai ralat baharu.

func NewFileReadError(filepath string, err error) error {
    return fmt.Errorf("failed to read file %s: %v", filepath, err)
}

func ReadFile(filepath string) ([]byte, error) {
    data, err := ioutil.ReadFile(filepath)
    if err != nil {
        return nil, NewFileReadError(filepath, err)
    }
    return data, nil
}

Dengan cara ini, apabila ralat berlaku dalam fungsi, maklumat ralat yang lebih kaya akan dikeluarkan, termasuk nama fail dan maklumat ralat khusus.

  1. Ralat penghantaran dan pengendalian

Di Golang, ralat dihantar oleh nilai pulangan. Apabila fungsi mengembalikan ralat, kita perlu menyemak ralat dan mengendalikannya dengan sewajarnya. Apabila memanggil fungsi lain, kita perlu mempertimbangkan bahawa ralat dalam fungsi ini boleh menjejaskan fungsi kita dan mengendalikan ralat dengan sewajarnya.

Sebagai contoh, semasa memproses permintaan HTTP, kami boleh mentakrifkan fungsi pemprosesan berikut:

func handleRequest(w http.ResponseWriter, r *http.Request) {
    data, err := ReadFile("test.txt")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    fmt.Fprintf(w, "File content: %s", string(data))
}

Dalam fungsi pemprosesan ini, kami membaca data fail dengan memanggil fungsi ReadFile. Jika ralat berlaku semasa membaca fail, kami akan mengeluarkan mesej ralat yang sepadan supaya pengguna dapat memahami punca ralat dalam masa.

Apabila mengendalikan ralat, kita perlu mempertimbangkan jenis ralat yang mungkin berlaku dan mengendalikan ralat tersebut dengan sewajarnya. Jika terdapat beberapa ralat yang tidak dapat dipulihkan, kami mungkin perlu menamatkan program dengan segera, atau merekodkan maklumat yang berkaitan untuk pemeriksaan kemudian.

  1. Perbandingan dan pertimbangan ralat

Di Golang, kita boleh membandingkan dan menilai ralat melalui fungsi ralat.Is() dan ralat.As(). Fungsi errors.Is() digunakan untuk menentukan sama ada ralat adalah jenis ralat tertentu dan fungsi ralat.As() digunakan untuk menukar ralat kepada jenis ralat tertentu.

Sebagai contoh, kita boleh menggunakan fungsi ralat.Is() untuk menentukan sama ada ralat adalah daripada jenis tertentu:

err := ReadFile("test.txt")
if errors.Is(err, os.ErrNotExist) {
    fmt.Println("File does not exist")
}

Apabila ralat berlaku semasa membaca fail, kita boleh menggunakan ralat .Is() Fungsi menentukan sama ada ralat itu adalah ralat jenis os.ErrNotExist. Jika ia adalah ralat jenis ini, kami akan mengeluarkan mesej ralat yang sepadan.

Kami juga boleh menukar ralat kepada jenis ralat tertentu melalui fungsi ralat.As() untuk pengendalian ralat yang lebih baik. Sebagai contoh, kita boleh menukar ralat jenis FileReadError kepada jenis ralat lain dan mengendalikan pelbagai jenis ralat secara berbeza.

err := ReadFile("test.txt")
var fileErr *FileReadError
if errors.As(err, &fileErr) {
    if fileErr.Err == os.ErrNotExist {
        fmt.Println("File does not exist")
    } else if fileErr.Err == os.ErrPermission {
        fmt.Println("You do not have permission to read this file")
    } else {
        fmt.Println("Error reading file:", fileErr.Err)
    }
}

Dalam contoh ini, kami menggunakan fungsi ralat.As() untuk menukar ralat kepada ralat jenis FileReadError dan menggunakan kaedah pemprosesan yang berbeza untuk jenis medan Ralat yang berbeza.

  1. Amalan Terbaik dalam Pengendalian Ralat

Di Golang, pengendalian ralat ialah kaedah pengaturcaraan elegan yang boleh meningkatkan kebolehbacaan dan kebolehselenggaraan program. Berikut ialah beberapa amalan terbaik pengendalian ralat biasa:

  • Gunakan jenis ralat sebagai nilai pulangan dalam fungsi untuk menunjukkan sama ada ralat berlaku.
  • Maklumat ralat output dalam program tepat pada masanya dan menyediakan maklumat kontekstual yang mencukupi untuk memudahkan pengguna memahami punca ralat.
  • Kategori jenis ralat yang mungkin berlaku dan gunakan kaedah pengendalian yang sepadan.
  • Apabila memproses permintaan HTTP dan operasi I/O rangkaian lain, anda harus sentiasa menyemak ralat dan maklumat ralat output tepat pada masanya.
  • Apabila mengendalikan ralat dalam rantaian fungsi, penghantaran ralat dan pertimbangan harus direalisasikan melalui fungsi ralat.Is() dan ralat.As().

Ringkasan: Melalui pembelajaran di atas, kita dapati di Golang, pengendalian ralat dipandang serius. Mengendalikan ralat dengan anggun boleh menjadikan program lebih boleh diselenggara, lebih teguh dan meningkatkan keupayaan pengekodan jurutera perisian.

Atas ialah kandungan terperinci golang menangani kesilapan dengan anggun. 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