在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中文網其他相關文章!