Taip Penegasan Menggunakan reflect.TypeOf() dalam Go
In Go, apabila bekerja dengan antara muka, mungkin perlu melakukan penegasan jenis untuk mendapatkan jenis konkrit asas. Timbul persoalan mengenai cara menghantar Jenis (dikembalikan oleh reflect.TypeOf()) kepada jenis tertentu untuk penegasan.
Masalah:
Pertimbangkan kod contoh:
func IdentifyItemType(name string) interface{} { var item interface{} switch name { default: item = Article{} } return item }
Di sini, kami bertujuan untuk mengenal pasti struct (Artikel) berdasarkan nama rentetan. Walau bagaimanapun, penegasan jenis memerlukan jenis, tetapi mencerminkan.TypeOf() mengembalikan Jenis.
Penyelesaian:
Jika matlamatnya adalah untuk menghidupkan jenis bahagian luar antara muka{}, pantulan tidak diperlukan:
switch x.(type){ case int: dosomething() }
Walau bagaimanapun, untuk menghidupkan jenis atribut dalam antara muka, pantulan boleh digunakan:
s := reflect.ValueOf(x) for i:=0; i<s.NumValues; i++{ switch s.Field(i).Interface().(type){ case int: dosomething() } }
Ini membenarkan penukaran jenis pada atribut antara muka. Walaupun bukan penyelesaian yang elegan, ia menyediakan fungsi sehingga alternatif yang lebih baik ditemui.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Penegasan Jenis pada Keputusan `reflect.TypeOf()` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!