Mengendalikan Ralat daripada Goroutines melalui Saluran
Dalam Go, fungsi lazimnya mengembalikan nilai dan ralat untuk menunjukkan hasil operasi. Walau bagaimanapun, apabila melaksanakan fungsi sedemikian dalam goroutine dan menyampaikan hasil melalui saluran, pengendalian ralat dengan cekap menjadi penting.
Untuk menangani perkara ini, pendekatan biasa ialah merangkum kedua-dua nilai dan ralat dalam struktur tersuai. Struktur ini kemudiannya dihantar melalui saluran, membenarkan pemanggil untuk mendapatkan kedua-dua keputusan dan sebarang ralat yang berpotensi.
Pertimbangkan coretan kod berikut:
type Result struct { Message string Error error } ch := make(chan Result)
Dalam contoh ini, struct Hasil memegang kedua-dua Mesej (rentetan) dan Ralat. Saluran ch dicipta untuk menghantar struct ini antara goroutine dan pemanggil.
Apabila menggunakan fungsi createHashedPassword dalam goroutine, hasilnya boleh dihantar melalui saluran ch menggunakan sintaks berikut:
go func() { result, err := createHashedPassword(password) //If error occurred send error if err != nil { errorResult := Result{Err:err} ch <- errorResult } }()
Di bahagian penerima saluran, pemanggil boleh mendapatkan semula struktur Hasil dan mengendalikan kedua-dua mesej dan sebarang kemungkinan ralat:
result := <-ch if result.Error != nil { // Handle error } else { // Use result.Message }
Dengan menggunakan teknik ini, ia menjadi mungkin untuk mengendalikan ralat dengan lancar dijana dalam goroutine sambil masih mengekalkan mekanisme komunikasi berasaskan saluran yang bersih dan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat daripada Goroutines melalui Saluran dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!