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 
}

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

相关推荐
Kisorge16 分钟前
【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
c语言·开发语言
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程