Loops 在golang中的动态嵌套结构上循环
我创建了一个动态结构来解组JSON。 结构看起来像: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
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:“分区,省略空”
希望有帮助,谢谢