Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Go Structs?

Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Go Structs?

Patricia Arquette
Lepaskan: 2024-12-02 17:52:11
asal
130 orang telah melayarinya

How to Resolve the

Jenis Rekursif Tidak Sah dalam Struct dalam Go

Pernyataan Masalah

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
}
Salin selepas log masuk

Sebab

Ralat berlaku kerana pengkompil tidak dapat menentukan saiz struct. Saiz penunjuk diketahui, tetapi saiz struct yang mengandungi dirinya tidak diketahui.

Penyelesaian

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
}
Salin selepas log masuk

Ini memastikan saiz struktur Alam Sekitar diketahui dan membolehkan pengkompil meneruskan kompilasi.

Mencipta Persekitaran

Selepas mengemas kini definisi struct, anda boleh mencipta struct Persekitaran seperti berikut:

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan