Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar Sekeping Struktur kepada Sekeping Antara Muka dalam Go?

Bagaimana untuk Menukar Sekeping Struktur kepada Sekeping Antara Muka dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-03 22:56:11950semak imbas

How to Convert a Slice of Structs to a Slice of Interfaces in Go?

Menukar Slice of Structs to Slice of Interface

Apabila cuba untuk menetapkan sekeping struct kepada sekeping antara muka, seperti dalam kes menghantar data ke stor data AppEngine.PutMulti, anda mungkin menghadapi ralat penyusunan kerana jenis ketidakserasian. Ralat berkemungkinan berbunyi, "tidak boleh menggunakan jenis []*MyStruct sebagai jenis []antara muka { } dalam tugasan."

Untuk memahami isu ini, adalah penting untuk mengenali bahawa memberikan sekeping struct kepada sekeping antara muka melibatkan lebih daripada penukaran jenis mudah. Sebaliknya, setiap elemen struct mesti dibungkus secara individu dalam antara muka. Proses ini mencipta penunjuk kepada struct asal dan termasuk deskriptor untuk jenisnya.

Akibatnya, tiada cara langsung atau automatik untuk menyalin sekeping struct ke dalam sekeping antara muka. Setiap elemen mesti disalin dan dibalut secara eksplisit dalam antara muka untuk mencapai output yang diingini. Oleh itu, satu-satunya penyelesaian yang berdaya maju ialah melaksanakan tugasan satu elemen pada satu masa.

Pertimbangkan coretan berikut sebagai contoh:

var src []*MyStruct = append(src, &MyStruct {...})
var dest []interface{}
for _, s := range src {
    dest = append(dest, s)
}

Dalam contoh ini, kepingan struct diulangi selesai, dan setiap struct dilampirkan pada kepingan antara muka dengan membungkusnya dalam antara muka secara eksplisit. Walaupun proses ini mungkin membosankan, ia adalah satu-satunya kaedah untuk berjaya menukar sekeping struct kepada sekeping antara muka.

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

Kenyataan:
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