Struktur Bersarang dan Literal Permulaan Medan
Dalam Go, struktur boleh membenamkan struktur lain, yang dikenali sebagai struktur bersarang. Apabila memulakan struktur bersarang dengan nilai ahli literal, adalah perkara biasa untuk menghadapi isu apabila pengkompil membenderakan medan yang tidak diketahui dalam struktur induk.
Sebagai contoh, pertimbangkan kod berikut:
type A struct { MemberA string } type B struct { A MemberB string } b := B { MemberA: "test1", MemberB: "test2", }
Di sini, struct B ditakrifkan untuk mengandungi medan tanpa nama jenis A. Walau bagaimanapun, apabila cuba untuk memulakan medan MemberA bagi struct A bersarang secara langsung, pengkompil melemparkan ralat:
unknown B field 'MemberA' in struct literal
Ralat ini berlaku kerana semasa pemulaan, struct tanpa nama hanya dikenali dengan nama jenisnya. Ahli dan fungsi yang dikaitkan dengan struct tanpa nama belum lagi dieksport sehingga selepas kejadian itu dibuat.
Untuk menyelesaikan isu ini, anda perlu memberikan contoh yang sah bagi struct tanpa nama (A dalam kes ini) apabila memulakan medan bersarang:
b := B { A: A{MemberA: "test1"}, MemberB: "test2", }
Dengan memberikan contoh struct tanpa nama secara eksplisit, anda membekalkan pengkompil maklumat yang diperlukan kepada akses medan MemberA.
Mesej ralat pengkompil "medan B tidak diketahui 'MemberA' dalam struct literal" menunjukkan bahawa medan MemberA tidak dikenali dalam konteks struct B kerana ia tergolong dalam struct A tanpa nama.
Atas ialah kandungan terperinci Bagaimana untuk Memulakan Struktur Bersarang dengan Betul dalam Go Menggunakan Literal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!