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 请教请教,查了一天资料还没搞定。

11 回复

对了,我不想用
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 def


go<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 结构体嵌套了指向自身类型的指针字段 LeftRight。通过指针,我们可以动态地构建树形结构,并在需要时添加或访问子节点。

需要注意的是,递归结构体的实例化应谨慎处理,以避免无限递归或内存泄漏等问题。在实际应用中,通常还会为递归结构体提供辅助函数,以简化节点的添加和遍历等操作。

回到顶部