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
Patricia Arquetteasal
2024-12-02 17:52:11136semak imbas

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
}

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
}

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)}

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!

Kenyataan:
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