Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Fallthrough Tidak Dibenarkan dalam Suis Jenis Go?

Mengapa Fallthrough Tidak Dibenarkan dalam Suis Jenis Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-13 03:57:02441semak imbas

Why is Fallthrough Disallowed in Go's Type Switch?

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:

  • Ketidakpadanan Jenis: Dalam suis jenis, pembolehubah yang dinilai menukar jenis bergantung pada cawangan kes yang dimasukkan. Sebagai contoh, jika pembolehubah diberikan boolean dalam satu cawangan dan rentetan dalam yang lain, fallthrough akan mengakibatkan jenis tidak padan.
  • Gelagat Mengelirukan: Membenarkan fallthrough dalam suis jenis akan memperkenalkan samar-samar semantik. Pertimbangkan suis di mana pembolehubah diberikan boolean dalam cawangan sebelumnya. Jika kegagalan dibenarkan, tidak jelas cara pembolehubah itu harus ditangani di cawangan berikutnya. Sekiranya ia kekal sebagai boolean atau menjadi antara muka{} yang memegang sama ada boolean atau nilai jenis baharu?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn