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 
}

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

相关推荐
晨晖26 分钟前
单链表逆转,c语言
c语言·数据结构·算法
我不是程序猿儿20 分钟前
【C#】画图控件的FormsPlot中的Refresh功能调用消耗时间不一致缘由
开发语言·c#
rit843249925 分钟前
C# Socket 聊天室(含文件传输)
服务器·开发语言·c#
嘉琪0011 小时前
Vue3+JS 高级前端面试题
开发语言·前端·javascript
xunyan62341 小时前
面向对象(下)-接口的理解
java·开发语言
遥不可及~~斌1 小时前
Java 面试题集 -- 001
java·开发语言
2501_921649491 小时前
如何获取美股实时行情:Python 量化交易指南
开发语言·后端·python·websocket·金融
im_AMBER2 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
集智飞行2 小时前
c++函数传参的几种推荐方式
开发语言·c++
鼾声鼾语2 小时前
matlab的ros2发布的消息,局域网内其他设备收不到情况吗?但是matlab可以订阅其他局域网的ros2发布的消息(问题总结)
开发语言·人工智能·深度学习·算法·matlab·isaaclab