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 
}

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

相关推荐
谢亮_vipxieliang2 分钟前
Go defer、panic与recover核心知识点
开发语言·后端·golang
迪康Defender14 分钟前
终端安全事后追溯能力解析:本地审计模块设计思路与落地实践
运维·开发语言·人工智能·安全·php·安全威胁分析·运维开发
(Charon)16 分钟前
【C++面试】迭代器失效是什么?vector、list、map中如何避免迭代器失效
c++·算法·面试
yujunl17 分钟前
开发一个可以用APIFOX来调试的接口
开发语言
苏辰澈34 分钟前
C++自己的族谱规则:继承详解下
c语言·开发语言·c++·visualstudio
hunter19901038 分钟前
英语作文题目
开发语言
谢亮_vipxieliang1 小时前
Go基础数据类型全解
开发语言·后端·golang
泡海椒1 小时前
JQuick-Excel 导入反向映射实战:让中文表头稳定落到业务字段
开发语言·python·excel
空堂与归1 小时前
AI 与 SI(超级智能):先分清窄智能与超级智能的边界
开发语言·人工智能·gpt
熊猫钓鱼>_>1 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 kotlin-inject 实现依赖注入适配
开发语言·华为·kotlin·ai编程·inject·鸿蒙·openharmony