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
Mary-Kate Olsenasal
2024-12-16 10:53:11306semak imbas

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()
}

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()
  }
}

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!

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