Apabila bekerja dengan struct bersarang di Golang, memulakan struct utama boleh menjadi rumit. Panduan ini bertujuan untuk menyediakan penyelesaian kepada ralat yang dihadapi semasa cuba memulakan struct dengan struct tanpa nama terbenam sebagai medan.
type DetailsFilter struct { Filter struct { Name string ID int } } 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"]}}
Kod ini cuba untuk memulakan Penapis Butiran struct dengan Penapis struct tanpa nama bersarang. Walau bagaimanapun, apabila cuba untuk memulakan medan Penapis daripada peta, ralat ditemui:
can not use (type interface {}) as type struct in field value : need type assertion
Penyelesaian yang disyorkan adalah untuk mengelakkan memulakan struct tanpa nama bersarang semasa pembinaan. Sebaliknya, mulakan struct bernilai sifar dan kemudian tetapkan nilai pada medan bersarang:
df := DetailsFilter{} df.Filter.Name = "myname" df.Filter.ID = 123
Alternatif lain ialah menamakan jenis struct tanpa nama dan memulakannya secara eksplisit:
type Filter struct { Name string ID int } type DetailsFilter struct { Filter Filter } df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Struktur Bersarang dengan Betul di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!