Rumah > pembangunan bahagian belakang > Golang > Mengapa Saya Mendapat Ralat 'Tidak Dapat Menaip Suis pada Nilai Bukan Antara Muka' di Golang?

Mengapa Saya Mendapat Ralat 'Tidak Dapat Menaip Suis pada Nilai Bukan Antara Muka' di Golang?

Susan Sarandon
Lepaskan: 2024-11-13 04:40:02
asal
944 orang telah melayarinya

Why Do I Get the

Ralat: "Tidak Boleh Menaip Suis pada Nilai Bukan Antara Muka" di Golang

Apabila bekerja dengan penegasan jenis, anda mungkin menghadapi ralat " tidak boleh menaip suis pada nilai bukan antara muka." Ini berlaku apabila cuba melakukan suis jenis pada nilai yang bukan antara muka.

Di Golang, penukaran jenis membolehkan anda melaksanakan kod secara bersyarat berdasarkan jenis pembolehubah. Walau bagaimanapun, ia memerlukan pembolehubah itu daripada jenis antara muka. Antara muka mewakili kontrak yang mentakrifkan satu set kaedah yang mesti dilaksanakan oleh jenis pelaksana.

Dalam coretan kod yang disediakan, jenis bernama Stringer ditakrifkan dengan kaedah String() tunggal. Jenis Nombor juga melaksanakan kaedah String(), menjadikannya pelaksanaan konkrit antara muka Stringer.

type Stringer interface {
    String() string
}

type Number struct {
    v int
}

func (number *Number) String() string {
    return strconv.Itoa(number.v)
}
Salin selepas log masuk

Walau bagaimanapun, ralat berlaku dalam fungsi utama, di mana suis jenis dicuba pada pembolehubah n , yang jenis *Nombor dan bukannya Stringer.

func main() {
    n := &Number{1}
    switch v := n.(type) {
    case Stringer:
        fmt.Println("Stringer:", v)
    default:
        fmt.Println("Unknown")
    }
}
Salin selepas log masuk

Untuk menyelesaikan isu ini, anda perlu menghantar n ke antara muka{} sebelum melaksanakan jenis penegasan. Ini kerana antara muka{} boleh mewakili sebarang nilai arbitrari.

func main() {
    n := &Number{1}
    switch v := interface{}(n).(type) {
    case Stringer:
        fmt.Println("Stringer:", v)
    default:
        fmt.Println("Unknown")
    }
}
Salin selepas log masuk

Dengan menghantar n ke antara muka{}, anda pada dasarnya membenarkan suis jenis mempertimbangkan kemungkinan n mungkin jenis Stringer. Setelah suis jenis dimasukkan, jenis n sebenar boleh ditentukan dan cawangan kes yang sesuai dilaksanakan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tidak Dapat Menaip Suis pada Nilai Bukan Antara Muka' di Golang?. 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