golang 中的动态嵌套结构

我想创建一个动态结构。我正在使用一些命令来获取JSON格式的一些信息,并希望将其解构为结构。Json 看起来像这样:


{

"blockdevices": [

    {

        "disk_name": "sda",

        "mountpoint": null,

        "size": "50G",

        "fstype": "mpath_member",

        "partitions": [

            {

                "disk_name": "sda1",

                "mountpoint": null,

                "size": "20G",

                "fstype": "vfat"

            },

            {

                "name": "3600a09803830566e615d5171774a3837",

                "mountpoint": null,

                "size": "50G",

                "fstype": null,

                "partitions": [

                    {

                        "disk_name": "3600a09803830566e615d5171774a3837-part1",

                        "mountpoint": "/myData",

                        "size": "20G",

                        "fstype": "vfat",

                        "partitions": [

                            {

                                "disk_name": "3600a09803830566e615d5171774a3837-part2",

                                "mountpoint": "/myData2",

                                "size": "10G",

                                "fstype": "vfat"

                            }

                        ]

                    }

                ]

            }

        ]

    }

]}

问题是可能有 b 个未知的子分区可以是 1,也可以是任意数字。我创建了以下结构:


Blockdevices []struct {

    DiskName   string      `json:"disk_name"`

    Mountpoint interface{} `json:"mountpoint"`

    Size       string      `json:"size"`

    Fstype     string      `json:"fstype"`


它适用于最多两个子分区,但我想要一个解决方案,无论我们有多少个子分区,它都可以正常工作。有没有办法做到这一点。磁盘结构内的分区结构是相同的,我们可以像写一次,但它作为循环工作吗?


冉冉说
浏览 141回答 2
2回答

繁星点点滴滴

结构可以递归定义。定义一个单独的结构(作为一个受欢迎的副作用,这也使你的代码更容易处理,而不是在一个大的嵌套类型中定义整个JSON结构),并让该结构引用本身(注意类型中的属性):PartitionPartitionsPartitiontype Blockdevice struct {    DiskName   string      `json:"disk_name"`    Mountpoint interface{} `json:"mountpoint"`    Size       string      `json:"size"`    Fstype     string      `json:"fstype"`    Partitions []Partition `json:"partitions"`}type Partition struct {    DiskName      string      `json:"disk_name"`    Mountpoint    interface{} `json:"mountpoint"`    Size          string      `json:"size"`    Fstype        string      `json:"fstype"`    SubPartitions bool        `json:"sub_partitions"`    Partitions    []Partition `json:"partitions"`}

跃然一笑

定义结构:Partitiontype Partition struct {   DiskName      string      `json:"disk_name"`   Mountpoint    interface{} `json:"mountpoint"`   Size          string      `json:"size"`   Fstype        string      `json:"fstype"`   SubPartitions bool        `json:"sub_partitions"`   Partitions    []Partition `json:"partitions"`}这可以使用分区切片根据需要嵌套尽可能多的内容。在 中使用此类型。BlockDevice
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go