Rumah > pembangunan bahagian belakang > Golang > Mengapa Suis Jenis dengan Berbilang Kes dalam Go Menyebabkan Ralat Pembolehubah 'tidak ditentukan', dan Bagaimana Ini Boleh Diselesaikan?

Mengapa Suis Jenis dengan Berbilang Kes dalam Go Menyebabkan Ralat Pembolehubah 'tidak ditentukan', dan Bagaimana Ini Boleh Diselesaikan?

Mary-Kate Olsen
Lepaskan: 2024-12-16 10:53:11
asal
304 orang telah melayarinya

Why Does a Type Switch with Multiple Cases in Go Cause

Suis Taip dengan Berbilang Kes dalam Go

Apabila menggunakan suis jenis dengan berbilang kes, seseorang mungkin menghadapi ralat yang menyatakan bahawa pembolehubah dalam kes dengan pelbagai jenis tidak ditentukan. Tingkah laku ini berpunca daripada spesifikasi bahasa Go, yang menentukan bahawa pengawal suis jenis mungkin termasuk pengisytiharan pembolehubah pendek.

Dalam kes sedemikian, pembolehubah mempunyai jenis yang sama seperti jenis yang disenaraikan dalam kes jenis tunggal. Walau bagaimanapun, dalam kes dengan penyenaraian berbilang jenis, pembolehubah mempunyai jenis ungkapan dalam pengawal suis jenis.

Untuk menggambarkan ini, pertimbangkan kod berikut:

type A struct {
  a int
}

func (this *A) test() {
  fmt.Println(this)
}

type B struct {
  A
}

var foo interface{}
foo = A{}

switch a := foo.(type) {
  case B, A:
    a.test()
}
Salin selepas log masuk

Berjalan kod ini akan mengakibatkan ralat "a.test undefined (jenis antara muka {} ialah antara muka tanpa kaedah)." Ini kerana pembolehubah a mempunyai antara muka jenis{}, bukan jenis kes tertentu.

Untuk menyelesaikan isu ini, seseorang boleh menegaskan bahawa ungkapan pengawal suis jenis mempunyai kaedah yang dijangkakan. Contohnya:

type tester interface {
  test()
}

func main() {
  var foo interface{}
  foo = &B{}

  if a, ok := foo.(tester); ok {
    fmt.Println("foo has test() method")
    a.test()
  }
}
Salin selepas log masuk

Kod ini mula-mula menyemak sama ada foo mempunyai kaedah test() dan jika ada, ia memberikan nilai foo kepada a dan memanggil kaedah test().

Atas ialah kandungan terperinci Mengapa Suis Jenis dengan Berbilang Kes dalam Go Menyebabkan Ralat Pembolehubah 'tidak ditentukan', dan Bagaimana Ini Boleh Diselesaikan?. 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