Cara Memulakan struct Terbenam dalam Golang
Dalam Go, adalah mungkin untuk mentakrifkan struct dalam struct lain untuk mencipta struktur data bersarang. Walau bagaimanapun, memulakan struct bersarang ini boleh memberikan cabaran.
Pertimbangkan contoh berikut:
type DetailsFilter struct { Filter struct { Name string ID int } }
Untuk memulakan struct DetailsFilter dengan struct Penapis terbenam, anda mungkin menghadapi ralat jika anda mencuba untuk menetapkan peta generik kepada medan Penapis.
var M map[string]interface{} M = make(map[string]interface{}) M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5} var detailsFilter = DetailsFilter{Filter: M["Filter"]}}
Ralat yang anda akan terima ialah: "tidak boleh menggunakan (taip antara muka {}) sebagai jenis struct dalam nilai medan : memerlukan penegasan jenis."
Sebab ralat ini ialah medan struct tanpa nama, seperti yang digunakan di sini untuk Penapis, memerlukan jenis yang tepat untuk dinyatakan semasa pemula. Anda boleh menyelesaikannya dengan mentakrifkan secara eksplisit jenis medan Penapis dalam struct tanpa nama:
type DetailsFilter struct { Filter struct { Name string ID int } } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Sebagai alternatif, anda boleh memilih untuk tidak menggunakan struct tanpa nama untuk Penapis dan sebaliknya memberikannya jenis bernama:
type Filter struct { Name string ID int } type DetailsFilter struct { Filter Filter } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Kedua-dua kaedah akan membolehkan anda memulakan struct DetailsFilter dengan struct Filter bersarang.
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Struktur Terbenam dengan Betul dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!