Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在golang中的动态嵌套结构上循环_Loops_Go_Struct_Dynamic - Fatal编程技术网

Loops 在golang中的动态嵌套结构上循环

Loops 在golang中的动态嵌套结构上循环,loops,go,struct,dynamic,Loops,Go,Struct,Dynamic,我创建了一个动态结构来解组JSON。 结构看起来像: type Partition struct { DiskName string `json:"disk_name"` Mountpoint interface{} `json:"mountpoint,omitempty"` Size string `json:"size"` Fstype

我创建了一个动态结构来解组JSON。 结构看起来像:

type Partition struct {
    DiskName      string      `json:"disk_name"`
    Mountpoint    interface{} `json:"mountpoint,omitempty"`
    Size          string      `json:"size"`
    Fstype        string      `json:"fstype,omitempty"`
    SubPartitions bool        `json:"sub_partitions"`
    Partitions    []Partition `json:"partitions,omitempty"`
}

type NasInfo struct {
    Blockdevices []struct {
        DiskName   string      `json:"disk_name"`
        Mountpoint interface{} `json:"mountpoint,omitempty"`
        Size       string      `json:"size"`
        Fstype     string      `json:"fstype,omitempty"`
        Partitions []Partition `json:"partitions,omitempty"`
    } `json:"blockdevices"`
}
现在块设备中可以有很多分区,一个分区中可以有更多的子分区。我想手动为分区结构中的字段赋值。我该怎么做呢。 如何迭代每个分区和子分区并为其分配手动值。 有没有办法做到这一点

目前正在使用此:

    totalPartitions := len(diskInfo.Blockdevices[0].Partitions)
    if totalPartitions > 0 {
        for i := 0; i < totalPartitions; i++ {
            if diskInfo.Blockdevices[0].Partitions[i].Partitions != nil {
                diskInfo.Blockdevices[0].Partitions[i].SubPartitions = true
            } else {
                diskInfo.Blockdevices[0].Partitions[i].SubPartitions = false
            }
        }
    }
totalPartitions:=len(diskInfo.Blockdevices[0].分区)
如果totalPartitions>0{
对于i:=0;i

但是它只能处理一个分区和一个子分区。是否有任何方法可以迭代每个分区并为其赋值?

由于
子分区
标志与
分区
耦合,一个选项是删除
子分区
字段,并添加一个计算此值的方法:

func(p*Partition)HasSubPartitions()bool{
//注意:要检查切片是否为空,建议查看
//“len(slice)”而不是nil(可能有非nil指针
//到长度为0的切片)
返回len(p.Partitions)>0
}
编写一个函数

func markSubPartition(p *Partition) {
if len(p.Partitions) > 0 {
    p.SubPartitions = true
    for _, part := range p.Partitions {
        markSubPartition(part)
    }
} else {
    p.SubPartitions = false
}}
然后像这样在设备上循环

for _, part := range diskInfo.Blockdevices[0].Partitions {
                markSubPartition(part)}
还需要将结构更改分区字段更改为: 分区[]*分区
json:“分区,省略空”
希望有帮助,谢谢