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

Mengapa Fallthrough Dilarang dalam Suis Jenis Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 00:35:02242semak imbas

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!")
}

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!")
}

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!

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