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 
}

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

相关推荐
刘永鑫Adam4 分钟前
Nature Microbiology | 基于TRACS算法的跨多界宏基因组数据菌株水平溯源推演
算法
小O的算法实验室6 分钟前
2026年SEVC,面向无人机辅助边缘计算的自适应群体智能算法,深度解析+性能实测
算法·边缘计算·智能算法·智能算法改进
XMYX-06 分钟前
27 - Go string 字符串处理与格式化:从底层原理到工程实践
开发语言·golang
赏金术士9 分钟前
Kotlin 协程面试题大全(Android 高频版)
android·开发语言·kotlin
高锰酸钾_12 分钟前
计算机网络-网络层-路由算法与路由协议
计算机网络·算法·智能路由器
烟雨江南aabb17 分钟前
Python第四弹:python进阶-匿名函数和内置函数
开发语言·python
智者知已应修善业22 分钟前
51单片机4按键控制共阳LED霓虹灯切换1整体闪烁2流水下3流水上4间隔闪烁】2023-10-27
c++·经验分享·笔记·算法·51单片机
lolo大魔王26 分钟前
Go 语言原生 SQL 操作 MySQL 超详细全解 + 生产级项目模板(纯官方库无ORM)
数据库·sql·golang
不瘦80斤不改名27 分钟前
JavaScript 基础语法完全指南
开发语言·javascript·ecmascript
小陈的进阶之路35 分钟前
Python系列课(9)——面向对象
开发语言·python