Golang Go语言中嵌套自身的 Struct 该如何实例化?
Golang Go语言中嵌套自身的 Struct 该如何实例化?
有个
type A struct {
B struct {
Count int json:"count"
Status int json:"status"
} json:"b"
}
用 A{B{Count: 112,Status: 112}}报我没有定义 B 请教请教,查了一天资料还没搞定。
对了,我不想用
var a A
a.B.Count = 1
a.B.Status = 2
这种直接赋值的方法
更多关于Golang Go语言中嵌套自身的 Struct 该如何实例化?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
那就 type 一个 b 呗。
type b struct……
type B struct {
Count int json:"count"
Status int json:"status"
}
type A struct {
B json:"B"
}
func main() {
a := A{B{
Count: 11,
Status: 10,
}}
fmt.Println(a)
}
两位老哥。
我要嵌套自身 Struct,因为需要输出的 json 很复杂,嵌套自身这样看起来很爽
go<br>type A struct {<br> B struct {<br> Count int `json:"count"`<br> Status int `json:"status"`<br> } `json:"b"`<br>}<br><br>_ := A{<br> B: struct {<br> Count int `json:"count"`<br> Status int `json:"status"`<br> } {Count: 1, Status: 2},<br>}<br>
这个玩法并不好,反而更繁琐,如要保持类型的反射匿名可以用 type defgo<br>type X = struct {<br> Count int `json:"count"`<br> Status int `json:"status"`<br>} <br>
只能拆出来定义
我杀我自己?
A{B: struct {
Count int json:"count"
Status int json:"status"
}{Count: 1, Status: 2}}
B 不是类型名,是字段名
type A 里面的 struct 是一个匿名类型
实例化的时候,需要签名一致,tag 部分也要一样
这就很繁琐了啊,相当于“重新定义”一次,如果这样的话,我直接用设置 B 为匿名就行了。
为啥总是有些奇奇怪怪的用法
在Golang(Go语言)中,嵌套自身的结构体(也称为递归结构体)是一种常见的数据结构,用于表示如树、链表等递归数据结构。要实例化一个嵌套自身的结构体,可以通过指针或者匿名字段来实现。
以下是一个简单的示例,展示了如何定义一个嵌套自身的结构体以及如何实例化它:
package main
import "fmt"
// 定义一个嵌套自身的结构体
type TreeNode struct {
Value int
Left *TreeNode // 左子节点,使用指针类型
Right *TreeNode // 右子节点,使用指针类型
}
func main() {
// 实例化根节点
root := &TreeNode{Value: 1}
// 为根节点添加左子节点
root.Left = &TreeNode{Value: 2}
// 为根节点的左子节点添加右子节点
root.Left.Right = &TreeNode{Value: 3}
// 打印根节点及其子节点的值
fmt.Println("Root:", root.Value)
fmt.Println("Left of Root:", root.Left.Value)
fmt.Println("Right of Left of Root:", root.Left.Right.Value)
}
在这个示例中,TreeNode
结构体嵌套了指向自身类型的指针字段 Left
和 Right
。通过指针,我们可以动态地构建树形结构,并在需要时添加或访问子节点。
需要注意的是,递归结构体的实例化应谨慎处理,以避免无限递归或内存泄漏等问题。在实际应用中,通常还会为递归结构体提供辅助函数,以简化节点的添加和遍历等操作。