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 
}

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

相关推荐
long316几秒前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
近津薪荼1 分钟前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
牵牛老人2 分钟前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
熊文豪10 分钟前
探索CANN ops-nn:高性能哈希算子技术解读
算法·哈希算法·cann
froginwe1111 分钟前
Python3与MySQL的连接:使用mysql-connector
开发语言
熊猫_豆豆26 分钟前
YOLOP车道检测
人工智能·python·算法
灵感菇_29 分钟前
Java HashMap全面解析
java·开发语言
杜子不疼.30 分钟前
PyPTO:面向NPU的高效并行张量编程范式
开发语言
lly20240631 分钟前
C# 结构体(Struct)
开发语言
艾莉丝努力练剑41 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法