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!