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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 08:54:10356semak imbas

How to Resolve the

Memahami Ralat "Jenis Rekursif Tidak Sah dalam Struct dalam Go"

Dalam Go, jenis rekursif tidak dibenarkan dalam struct. Ralat ini timbul apabila cuba mentakrifkan struct yang mengandungi medan jenisnya sendiri.

Pertimbangkan takrifan awal struct Persekitaran:

type Environment struct {
    parent Environment
    symbol string
    value RCFAEValue
}

Di sini, medan induk mempunyai yang sama taip sebagai struct melampirkan, Persekitaran. Takrifan rekursif ini membawa kepada ralat "Persekitaran jenis rekursif tidak sah".

Penyelesaian: Menggunakan Penunjuk untuk Jenis Rekursif

Untuk menyelesaikan ralat ini, tukar medan induk kepada penunjuk kepada struct Persekitaran:

type Environment struct {
    parent *Environment // pointer to the Environment struct
    symbol string
    value RCFAEValue
}

Penunjuk ialah nilai yang menyimpan alamat memori yang lain nilai. Dengan menggunakan penuding untuk medan induk, kami mengalih keluar kebergantungan rekursif dan membenarkan pengkompil menentukan saiz struktur Persekitaran.

Mencipta Persekitaran

Untuk mencipta Persekitaran, gunakan & operator untuk mendapatkan alamat pembolehubah Persekitaran yang lain:

env := Environment{
    &fun_Val.ds, // using the address of fun_Val.ds
    fun_Val.param,
    exp.arg_exp.interp(existingEnv)}

Ini memastikan medan induk merujuk kepada struct Persekitaran yang sah, mengelakkan ralat sebelumnya yang disebabkan oleh penggunaan func_Val.ds secara langsung sebagai jenis *Persekitaran.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah dalam Struct in Go'?. 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