Mengapa kod Go saya membuang ralat 'suis tidak boleh menaip pada nilai bukan antara muka'?

Mary-Kate Olsen
Lepaskan: 2024-11-10 15:15:02
asal
374 orang telah melayarinya

Why does my Go code throw a

Memahami Ralat Suis Jenis

Dalam Go, menggunakan suis jenis pada pembolehubah bukan antara muka mengakibatkan ralat "tidak boleh menaip suis hidup nilai bukan antara muka." Untuk menyelesaikan isu ini, anda perlu menghantar pembolehubah kepada jenis antara muka yang sesuai sebelum mencuba suis jenis.

Dalam contoh yang diberikan, kod cuba melakukan suis jenis pada pembolehubah n, yang merupakan contoh daripada struct Nombor. Walau bagaimanapun, struct Number tidak melaksanakan sebarang antara muka, jadi ia tidak boleh digunakan secara langsung dalam suis jenis.

Menyelesaikan Ralat

Untuk membetulkan ralat, anda mesti pertama hantar n ke jenis antara muka{}, yang mewakili antara muka kosong. Ini menukar n kepada nilai yang boleh menyimpan sebarang jenis. Kemudian, dalam suis jenis, anda boleh menegaskan jenis sebenar nilai asas menggunakan kata kunci jenis.

Begini rupa kod yang diperbetulkan:

import (
  "fmt"
  "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 := interface{}(n).(type) {
  case Stringer:
    fmt.Println("Stringer:", v)
  default:
    fmt.Println("Unknown")
  }
}
Salin selepas log masuk

Dengan perubahan ini, kod berjaya mencetak "Stringer: 1".

Atas ialah kandungan terperinci Mengapa kod Go saya membuang ralat 'suis tidak boleh menaip pada nilai bukan antara muka'?. 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