为了账号安全,请及时绑定邮箱和手机立即绑定

golang 中的动态嵌套结构

golang 中的动态嵌套结构

Go
冉冉说 2022-08-30 21:48:30
我想创建一个动态结构。我正在使用一些命令来获取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"`它适用于最多两个子分区,但我想要一个解决方案,无论我们有多少个子分区,它都可以正常工作。有没有办法做到这一点。磁盘结构内的分区结构是相同的,我们可以像写一次,但它作为循环工作吗?
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

结构可以递归定义。定义一个单独的结构(作为一个受欢迎的副作用,这也使你的代码更容易处理,而不是在一个大的嵌套类型中定义整个JSON结构),并让该结构引用本身(注意类型中的属性):PartitionPartitionsPartition


type 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"`

}


查看完整回答
反对 回复 2022-08-30
?
跃然一笑

TA贡献1826条经验 获得超6个赞

定义结构:Partition


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"`

}

这可以使用分区切片根据需要嵌套尽可能多的内容。在 中使用此类型。BlockDevice


查看完整回答
反对 回复 2022-08-30
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号