Rumah > pembangunan bahagian belakang > Golang > Mengapa Fallthrough Dilarang dalam Suis Jenis Go?

Mengapa Fallthrough Dilarang dalam Suis Jenis Go?

Mary-Kate Olsen
Lepaskan: 2024-11-16 00:35:02
asal
224 orang telah melayarinya

Why is Fallthrough Prohibited in Go's Type Switches?

Larangan Fallthrough dalam Suis Jenis:

Dalam Go, pernyataan "fallthrough" ialah binaan bahasa yang membenarkan pelaksanaan kes berikutnya dalam pernyataan suis tanpa pernyataan putus yang jelas. Walau bagaimanapun, kegagalan tidak dibenarkan dalam suis jenis.

Mengapakah ini berlaku?

Suis jenis menentukan jenis ungkapan dan menetapkannya kepada pembolehubah yang dinyatakan dalam kes suis. Pembolehubah ini mewakili jenis ungkapan tertentu pada titik itu dalam suis.

Jika gagal dibenarkan, akan ada isu jenis ketidakpadanan. Mari kita pertimbangkan coretan kod yang disediakan:

//Empty interface
var x interface{}

//A int, float64, bool or string value
x = ...

switch i := x.(type) {
case int:
    fmt.Println(i + 1)
case float64:
    fmt.Println(i + 2.0)
case bool:
    fallthrough
case string:
    fmt.Printf("%v", i)
default:
    fmt.Println("Unknown type. Sorry!")
}
Salin selepas log masuk

Sekiranya bool adalah benar, pembolehubah i diberikan nilai bool dalam antara muka x. Jika kegagalan dibenarkan, pelaksanaan akan diteruskan ke kes rentetan. Walau bagaimanapun, pada ketika itu, pembolehubah i masih akan memegang nilai bool. Ketidakpadanan jenis ini akan mengakibatkan ralat.

Selain itu, pernyataan fallthrough tidak masuk akal dalam suis jenis kerana ia tidak boleh mengubah jenis pembolehubah i. Suis jenis bertujuan untuk mengecilkan jenis ungkapan kepada jenis tertentu pada setiap kes. Membenarkan kegagalan akan mengalahkan tujuan ini.

Untuk mencapai gelagat yang diingini, seseorang boleh menggunakan pernyataan suis dengan penukaran jenis eksplisit dalam setiap kes, seperti ditunjukkan di bawah:

switch i := x.(type) {
case bool, string:
    if b, ok := i.(bool); ok {
        fmt.Println(b) // value as bool
    } else {
        fmt.Printf("%v", i) // value as string
    }
default:
    fmt.Println("Unknown type. Sorry!")
}
Salin selepas log masuk

Dengan menggunakan pendekatan ini , seseorang boleh mengendalikan pelbagai jenis dalam satu penyataan suis tanpa memerlukan kegagalan.

Atas ialah kandungan terperinci Mengapa Fallthrough Dilarang dalam Suis Jenis Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan