Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menetapkan Sekeping Struktur kepada Sekeping Antara Muka dalam Go?

Bagaimanakah Saya Boleh Menetapkan Sekeping Struktur kepada Sekeping Antara Muka dalam Go?

Susan Sarandon
Lepaskan: 2024-11-30 19:19:15
asal
244 orang telah melayarinya

How Can I Assign a Slice of Structs to a Slice of Interfaces in Go?

Menetapkan Slice of Structs to Interface Slice

Apabila cuba untuk menetapkan sekeping struct ([]MyStruct) kepada secebis antara muka ( []antara muka{}), anda mungkin menghadapi ralat masa kompilasi. Ini kerana struct dan antara muka mempunyai perwakilan memori yang berbeza.

Struktur mempunyai medannya disimpan bersebelahan dalam ingatan, manakala antara muka disimpan sebagai pasangan dua perkataan, satu untuk maklumat jenis dan satu untuk data sebenar. Perbezaan ini menghalang penugasan langsung.

Penyelesaian yang Mungkin:

  • Salin Elemen Secara Individu: Anda boleh mengulang secara manual ke atas kepingan dan salin struktur setiap elemen ke dalam antara muka slice.
y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
Salin selepas log masuk
  • Gunakan Pembalut Antara Muka: Anda boleh mencipta jenis pembalut yang melaksanakan antara muka{} antara muka dan memegang struct asas.
type IMyStruct struct {
    MyStruct
}

func (i IMyStruct) Interface() interface{} {
    return i.MyStruct
}

x := []MyStruct{{5}, {6}}
y := []interface{}{IMyStruct{x[0]}, IMyStruct{x[1]}}
Salin selepas log masuk
  • Guna Kosong Antara muka: Anda boleh menetapkan kepingan struct kepada antara muka kosong, yang boleh menyimpan nilai apa-apa jenis.
var y interface{}
y = x // No type conversion required
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Sekeping Struktur kepada Sekeping Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan