Teka-teki Tugasan Tatasusunan Antara Muka dalam Go
Dalam Go, percubaan untuk menetapkan tatasusunan struct terus kepada tatasusunan antara muka, seperti yang ditunjukkan di bawah, menghasilkan ralat masa kompilasi:
x := []MyStruct{...} var y []interface{} y = x // Error: cannot use x as type []interface {}
Ralat ini berpunca daripada perbezaan asas dalam cara jenis struct dan antara muka disimpan dalam ingatan. Antara muka disimpan sebagai pasangan dua perkataan, yang terdiri daripada maklumat jenis dan data, manakala jenis struct disimpan sebagai medan bersebelahan dalam ingatan.
Memandangkan perwakilan ini tidak sejajar, penukaran langsung antara kedua-duanya tidak boleh dilaksanakan. Adalah perlu untuk menyalin elemen secara individu ke kepingan destinasi.
Untuk menyelesaikan isu ini, pertimbangkan salah satu daripada pilihan berikut:
var y []interface{} y = make([]interface{}, len(x)) for i, v := range x { y[i] = v }
var y interface{} y = x
Dalam senario terakhir, antara muka memegang rujukan abstrak kepada []MyStruct yang mendasari potong, membenarkan tingkah laku polimorfik.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menetapkan Tatasusunan Go Struct kepada Tatasusunan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!