>백엔드 개발 >Golang >Go 구조체 정의에서 '잘못된 재귀 유형' 오류를 해결하는 방법은 무엇입니까?

Go 구조체 정의에서 '잘못된 재귀 유형' 오류를 해결하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-31 01:31:09191검색

How to Resolve

인터프리터 구현을 위한 Go 구조체의 "잘못된 재귀 유형" 해결

Go에서 환경 구조체와 같이 재귀 유형이 있는 구조체를 정의하려고 할 때 자체 유형을 참조하는 상위 필드를 사용하면 "잘못된 재귀 유형" 오류가 발생할 수 있습니다. 이 문제를 해결하고 근본 원인을 이해하는 방법은 다음과 같습니다.

재귀 유형 및 포인터

Go에서 자체 유형을 직접 참조하는 구조체로 인해 컴파일러가 크기를 결정할 수 없게 됩니다. 구조체의. 이 문제를 해결하려면 구조체를 직접 포함하는 대신 구조체에 대한 포인터를 사용해야 합니다.

수정된 환경 구조체

다음의 수정된 환경 구조체 버전은 해당 상위 구조체에 대한 포인터를 사용합니다. field:

type Environment struct {
    parent *Environment // note that this is now a pointer
    symbol string
    value  RCFAEValue
}

포인터를 사용하면 포인터의 크기가 다음과 같으므로 컴파일러가 구조체의 크기를 결정할 수 있습니다. 미리 정의되어 있습니다.

환경 생성

새 환경을 생성할 때 환경 자체가 아닌 상위 환경에 대한 포인터를 전달해야 합니다.

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}

이렇게 하면 다음이 보장됩니다. 올바른 유형을 사용하고 있으며 구조체가 유효합니다.

위 내용은 Go 구조체 정의에서 '잘못된 재귀 유형' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.