editor php Baicao iterative mixed type slicing ialah kaedah operasi penghirisan berdasarkan iterator dan jenis campuran. Ia menyediakan cara yang fleksibel untuk mengendalikan pelbagai jenis pengumpulan data, sama ada tatasusunan, objek atau jenis lain. Dengan mengulang penghirisan jenis campuran, kami boleh memotong data dengan cepat dan cekap untuk mendapatkan subset yang kami perlukan. Kaedah penghirisan ini bukan sahaja memudahkan penulisan kod, tetapi juga meningkatkan kecekapan pelaksanaan program. Sama ada dalam pemprosesan data, reka bentuk algoritma atau medan lain, penghirisan jenis campuran berulang mempunyai nilai aplikasi yang luas.
Saya perlu mempunyai pelbagai jenis struktur dalam kepingan. Tetapi saya tidak boleh mengakses nilai medan setiap struct.
package main import "fmt" type X struct { Type string Num int } type Y struct { Type string Num int } type Z struct { Type string Num int } func main() { var items []interface{} x := X{Type: "X-type", Num: 1} items = append(items, x) y := Y{Type: "Y-type", Num: 2} items = append(items, y) z := Z{Type: "Z-type", Num: 3} items = append(items, z) for _, item := range items { fmt.Println(item) //{X-type 1} {Y-type 2} {Z-type 3} //fmt.Println(item.Num) // item.Num undefined (type interface{} has no field or method Num) //fmt.Println(item.Type) // item.Type undefined (type interface{} has no field or method Type) } }
Bagaimana untuk mengakses medan individu bagi setiap jenis struct?
Terdapat beberapa pilihan.
Gunakan jenis suis :
for _, item := range items { switch item := item.(type) { case x: fmt.printf("x: %d\n", item.num) case y: fmt.printf("y: %d\n", item.num) case z: fmt.printf("z: %d\n", item.num) default: // add code to handle unsupported type } }
Gunakan pakej refleksi untuk mengakses medan mengikut nama:
for _, item := range items { fmt.println(reflect.valueof(item).fieldbyname("num").interface().(int)) }
Antara muka penggunaan:
Tambah kaedah pengakses untuk setiap jenis:
func (x x) getnum() int { return x.num } func (y y) getnum() int { return y.num } func (z z) getnum() int { return z.num }
Isytiharkan antara muka:
type getnumer interface { getnum() int }
Antara muka penggunaan:
var items []GetNumer x := X{Type: "X-type", Num: 1} items = append(items, x) ... for _, item := range items { fmt.Println(item) //{X-type 1} {Y-type 2} {Z-type 3} fmt.Println(item.GetNum()) }
Atas ialah kandungan terperinci Lelaran pada kepingan jenis campuran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!