Fallthrough dalam Suis Jenis: Mengapa Ia Tidak Dibenarkan
Dalam pernyataan suis jenis Go, kata kunci "fallthrough" adalah dilarang. Dokumentasi rasmi secara ringkas menyatakan sekatan ini tanpa memberikan penjelasan yang mendalam. Artikel ini bertujuan untuk menyelidiki kemungkinan sebab di sebalik kekangan ini.
Memahami Isu
Dalam suis jenis, setiap pernyataan kes menilai ungkapan antara muka jenis{} kepada jenis tertentu. Nilai ungkapan kemudiannya terikat pada jenis yang ditentukan untuk digunakan dalam blok kes. Walau bagaimanapun, kegagalan boleh membawa kepada kekeliruan kerana pelbagai jenis yang dikaitkan dengan setiap kes.
Pertimbangkan contoh berikut:
var x interface{} x = bool(true) switch i := x.(type) { case int: fmt.Println(i + 1) // Error: cannot use bool as int case float64: fmt.Println(i + 2.0) // Error: cannot use bool as float64 case bool: fallthrough case string: fmt.Printf("%v", i) // Error: cannot use bool as string }
Dalam senario ini, pembolehubah i akan mempunyai jenis yang berbeza bergantung kes mana yang dihadapi. Apabila fallthrough digunakan, pernyataan kes berikutnya akan menjangkakan pembolehubah jenis yang sama seperti kes sebelumnya. Walau bagaimanapun, jika kes sebelumnya bool dan fallthrough digunakan, kes berikutnya akan menghadapi nilai rentetan jenis, yang membawa kepada ralat tidak padan taip.
Sebab Kemungkinan
Pendekatan Alternatif
Jika pembangun memerlukan kefungsian fallthrough dalam suis jenis, terdapat pendekatan alternatif untuk mencapai hasil yang serupa:
switch i := x.(type) { case int, float64: fmt.Println(i) }
switch i := x.(type) { case bool: if i { fmt.Println("True") } }
Atas ialah kandungan terperinci Mengapakah fallthrough tidak dibenarkan dalam pernyataan suis jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!