Rumah > pembangunan bahagian belakang > Golang > Taip Penegasan dalam Go: Mengapa 'Tidak Boleh Menaip Hidupkan Nilai Bukan Antara Muka' dan Bagaimana untuk Membetulkan?

Taip Penegasan dalam Go: Mengapa 'Tidak Boleh Menaip Hidupkan Nilai Bukan Antara Muka' dan Bagaimana untuk Membetulkan?

Susan Sarandon
Lepaskan: 2024-11-13 10:56:02
asal
475 orang telah melayarinya

Type Assertion in Go: Why

Taip Penegasan dalam Go: Menyelesaikan Ralat "Tidak Boleh Taip Suis pada Nilai Bukan Antara Muka"

Apabila bekerja dengan penegasan jenis dalam Go, adalah mungkin untuk menghadapi ralat "tidak boleh menaip suis pada nilai bukan antara muka." Mari kita mendalami maksud ini dan cara menyelesaikannya, dengan contoh menggunakan jenis tersuai.

Pertimbangkan coretan kod berikut:

package main

import "fmt"
import "strconv"

type Stringer interface {
    String() string
}

type Number struct {
    v int
}

func (number *Number) String() string {
    return strconv.Itoa(number.v)
}

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

Apabila anda menjalankan kod ini, anda akan menghadapi ralat "tidak boleh menaip suis pada nilai bukan antara muka." Ini menunjukkan bahawa penegasan jenis sedang dilakukan pada nilai bukan antara muka. Dalam kes ini, n ialah penunjuk kepada struct Nombor, yang bukan antara muka.

Penyelesaian adalah untuk menghantar nilai ke antara muka{} sebelum mencuba penegasan jenis. Ini kerana penegasan jenis hanya boleh dilakukan pada nilai antara muka. Berikut ialah kod yang diperbetulkan:

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

Sekarang, apabila anda menjalankan kod, ia akan mencetak "Stringer: 1." Ini kerana penghantaran n ke antara muka{} membolehkan ia dianggap sebagai nilai antara muka untuk penegasan jenis.

Atas ialah kandungan terperinci Taip Penegasan dalam Go: Mengapa 'Tidak Boleh Menaip Hidupkan Nilai Bukan Antara Muka' dan Bagaimana untuk Membetulkan?. 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