Dalam bidang bersamaan Go, pengendalian penamatan goroutine dan ralat dengan lancar adalah penting. Pertimbangkan kes penggunaan mudah di mana kami menyasarkan untuk mendapatkan semula data daripada berbilang pelayan jauh serentak, mengembalikan ralat pertama yang ditemui.
Percubaan awal mungkin melibatkan goroutin yang bocor, seperti yang diserlahkan dalam perkara berikut coretan kod:
func fetchAll() error { wg := sync.WaitGroup{} errs := make(chan error) leaks := make(map[int]struct{}) //... }
Untuk menangani isu ini, kita boleh menggunakan konteks atau gunakan pakej errgroup:
Pakej errgroup menawarkan cara yang mudah untuk menguruskan penamatan dan ralat goroutine. Ia secara automatik menunggu penyiapan semua goroutine yang disediakan atau membatalkan baki yang lain sekiranya berlaku sebarang ralat.
func fetchAll(ctx context.Context) error { errs, ctx := errgroup.WithContext(ctx) //... return errs.Wait() }
Kod ini secara elegan mengendalikan penamatan goroutine dan mengembalikan ralat pertama yang ditemui.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menamatkan Goroutine dengan Anggun dan Mengendalikan Ralat dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!