Go 循环结构并检查嵌套以查找匹配值

Go 循环结构并检查嵌套以查找匹配值,go,struct,interface,Go,Struct,Interface,我有这样一个Go结构: type AuditStruct struct { UsesResponsiveImages struct { ID string Details struct { Type string } } UsesWebpImages struct { ID string Details

我有这样一个Go结构:

type AuditStruct struct {
 UsesResponsiveImages struct {
        ID               string
        Details          struct {
            Type     string
        }
 }
 UsesWebpImages struct {
        ID               string
        Details          struct {
            Type     string
        }
 }
 FontDisplay struct {
        ID               string
        // NO Details
 }
 .. etc etc
}
我想迭代每个审计子结构,并检查其Details.Type是否等于“blah”

预期结果是将具有匹配详细信息的数据返回到结果。目前正在使用reflect,但无法解决此问题

v := reflect.ValueOf(audits)

values := make([]interface{}, v.NumField())

 for i := 0; i < v.NumField(); i++ {
   vDetails := v.Field(i).FieldByName("Details")
   // Cannot get type from vDetails.

   // Tried using values and interface but unsure how to access "type" sub value from values[i]
   values[i] = v.Field(i).Interface()
 }
v:=reflect.ValueOf(审核)
值:=make([]接口{},v.NumField())
对于i:=0;i
你就快到了。使用FieldByName钻取类型字段:

for i := 0; i < v.NumField(); i++ {
    vDetails := v.Field(i).FieldByName("Details")
    if !vDetails.IsValid() {
        continue
    }
    vType := vDetails.FieldByName("Type")
    if !vType.IsValid() {
        continue
    }
    values[i] = vType.Interface()
}
i:=0的
;i