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