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 
}

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

相关推荐
老秦包你会几秒前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香3 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??7 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
远望清一色23 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself33 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj44 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家1 小时前
go语言中package详解
开发语言·golang·xcode
llllinuuu1 小时前
Go语言结构体、方法与接口
开发语言·后端·golang