loops - 在golang中循环动态嵌套结构
问题描述
我创建了一个动态结构来解组 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
}
}
}
但它只能处理 1 个分区和一个子分区。有什么方法可以遍历每个并为其赋值?
解决方案
写一个函数
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)}
还需要将您的结构更改分区字段更改为:Partitions []*Partitionjson:"partitions,omitempty"
希望对您有所帮助,谢谢!