Slices Antara Muka dan Tatasusunan Struktur dalam Go
In Go, memberikan kepingan struct ([]MyStruct) kepada kepingan antara muka ([ ]antara muka{}) tidak boleh dilakukan secara langsung. Ini kerana struct dan antara muka menggunakan perwakilan memori yang berbeza.
Medan struktur bersebelahan dalam ingatan, manakala antara muka disimpan sebagai maklumat jenis dan pasangan data. Perbezaan ini menghalang penukaran langsung antara kedua-duanya.
Mengapa Tugasan Terus Gagal
Ralat pengkompil semasa cuba menetapkan x (sepotong struct) kepada y (antara muka slice) mencerminkan perbezaan asas ini. Go memerlukan keserasian jenis untuk tugasan dan kedua-dua jenis tidak sepadan.
Alternatif untuk Mengendalikan Tatasusunan Objek Generik
Walaupun ketidakupayaan untuk menetapkan tatasusunan struct secara langsung kepada kepingan antara muka , Go menawarkan beberapa pendekatan alternatif untuk mengendalikan objek generik tatasusunan:
Kod Contoh
// Copy Elements Individually var x []MyStruct = [...]MyStruct{{5}, {6}} var y []interface{} for _, v := range x { y = append(y, v) } // Interface Slices var x []MyStruct = [...]MyStruct{{5}, {6}} var y []interface{} = make([]interface{}, len(x)) for i, v := range x { y[i] = v } // Interface Wrapper type MyStructArrayWrapper interface { Get() []MyStruct } type MyStructArrayWrapperImpl struct { array []MyStruct } func (w *MyStructArrayWrapperImpl) Get() []MyStruct { return w.array } x := []MyStruct{MyStruct{5}, MyStruct{6}} var y interface{} = &MyStructArrayWrapperImpl{x}
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Slice Struktur Go kepada Slice Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!