Pokok Binari Setara dalam Go Tour
Latihan ini melibatkan penentuan sama ada dua pokok binari mengandungi nilai yang sama. Dalam pelaksanaan anda, anda betul-betul menggunakan gorout untuk melintasi kedua-dua pokok secara serentak dan menghantar nilainya ke saluran. Walau bagaimanapun, isu itu timbul apabila cuba memberi isyarat bahawa tiada lagi unsur yang tinggal di dalam pokok.
Mengelakkan Penutupan Pramatang
Menggunakan close(ch) pada Walk akan menjadi lebih awal. tutup saluran sebelum semua nilai dihantar, kerana rekursi akan keluar lebih awal. Sebaliknya, penyelesaian yang elegan melibatkan penggunaan penutupan:
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Closes the channel when this function returns var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t == nil { return } walk(t.Left) ch <- t.Value walk(t.Right) } walk(t) }
Penutupan ini menangkap saluran ch dan memastikan ia hanya ditutup apabila tiada lagi nod untuk dilalui. Pernyataan tutup tangguh memastikan penutupan dijalankan selepas semua panggilan rekursif selesai.
Dengan pembetulan ini, fungsi Sama anda boleh menentukan kesetaraan dengan tepat dengan menerima nilai secara berulang daripada saluran dan membandingkannya.
Atas ialah kandungan terperinci Bagaimanakah Goroutine dan Saluran Boleh Membandingkan Nilai Dua Pokok Binari dalam Go dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!