Dalam Go, mentakrifkan struct dengan jenis rekursif boleh mengakibatkan "tidak sah ralat jenis rekursif". Ralat ini berlaku apabila struct mengandungi medan yang sama jenis dengan struct itu sendiri.
Sebagai contoh, definisi struct berikut tidak sah:
type Environment struct { parent Environment symbol string value RCFAEValue }
Ralat berlaku kerana pengkompil tidak dapat menentukan saiz struct. Saiz penunjuk diketahui, tetapi saiz struct yang mengandungi dirinya tidak diketahui.
Untuk menyelesaikan isu ini, anda perlu menjadikan medan induk sebagai penunjuk:
type Environment struct { parent *Environment // note that this is now a pointer symbol string value RCFAEValue }
Ini memastikan saiz struktur Alam Sekitar diketahui dan membolehkan pengkompil meneruskan kompilasi.
Selepas mengemas kini definisi struct, anda boleh mencipta struct Persekitaran seperti berikut:
Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Dengan menggunakan operator &, anda memperoleh alamat pembolehubah fun_Val.ds dan memberikannya kepada medan induk, iaitu jenis *Persekitaran.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!