golang结构体struct递归引用异常解决办法: invalid recursive type: xxx refers to itself

异常信息: person.go:13:6: invalid recursive type: Person refers to itself

异常代码:

Go 复制代码
type Person struct{
    Name string
	Age int
    Child Person // 错误!
}

原因: 编译器无法确定一个包含自己的字段类型的类型的大小, 即上面代码中无法确定Child这个字段的大小,从而报无效的递归类型错误。

解决方法:将这个Child字段指向的类型Person改为指针类型, 即 Child *Person​ ; 因为go语言中的任何一个指针类型都是可以确定其大小的!

正确示例:

Go 复制代码
type Person struct{
	Name string
	Age int
	// 注意这里必须使用指针形式,否则编译器无法确定这个字段的大小(自己的大小可知,但是包含自己的大小的大小是无从知晓的),不使用指针会报invalid recursive type in a struct in go
	Child *Person 
}

总结: 编译器在编译的时候会对我们定义的每个对象都要确定其大小,这样才能帮我们分配对应大小的内存空间。 知道了这个基本原理,这类问题也就迎刃而解了!

相关推荐
Q***l6879 分钟前
C++在计算机图形学中的渲染
开发语言·c++
0和1的舞者14 分钟前
《网络编程核心概念与 UDP Socket 组件深度解析》
java·开发语言·网络·计算机网络·udp·socket
惜棠17 分钟前
visual code + rust入门指南
开发语言·后端·rust
n***i9517 分钟前
Rust在嵌入式系统中的内存管理
开发语言·后端·rust
q***062917 分钟前
ThinkPHP和PHP的区别
开发语言·php
小白程序员成长日记32 分钟前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展
Java天梯之路33 分钟前
Java 初学者必看:接口 vs 抽象类,到底有什么区别?
java·开发语言
7***53341 小时前
Rust错误处理模式
开发语言·后端·rust
T***16071 小时前
C++在游戏开发中的AI行为树
开发语言·c++
16_one1 小时前
autoDL安装Open-WebUi+Rag本地知识库问答+Function Calling
人工智能·后端·算法