Fallthrough dalam Suis Jenis: Penjelasan Mendalam
Pensuisan jenis dalam Go membolehkan pengendalian nilai yang cekap berdasarkan jenis konkritnya. Walau bagaimanapun, tidak seperti dalam penyataan kes suis standard, kegagalan secara eksplisit tidak dibenarkan dalam suis jenis. Pilihan reka bentuk ini menimbulkan persoalan tentang rasionalnya.
Memahami Sebab
Spesifikasi Go menyatakan bahawa "fallthrough" tidak dibenarkan dalam suis jenis. Larangan ini berpunca daripada beberapa faktor:
Contoh untuk Penjelasan
Untuk menggambarkan masalahnya, pertimbangkan kod berikut:
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }
Jika gagal dibenarkan, tidak jelas jenis yang akan dicetak untuk sarung rentetan. Ia akan menjadi samar-samar sama ada saya harus kekal sebagai boolean atau menjadi antara muka{} yang mengandungi kedua-dua boolean dan rentetan.
Penyelesaian Alternatif
Sementara fallthrough tidak dibenarkan masuk suis jenis, terdapat cara alternatif untuk mencapai gelagat yang serupa:
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
Pendekatan ini membolehkan pengendalian yang lebih khusus bagi jenis yang berbeza tanpa memperkenalkan jenis yang tidak sepadan atau kesamaran.
Atas ialah kandungan terperinci Mengapa Fallthrough Tidak Dibenarkan dalam Suis Jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!