#go #struct #interface
#Вперед #структура #интерфейс
Вопрос:
У меня есть структура перехода следующим образом:
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
}
Я хочу перебрать каждую подструктуру аудита и проверить, есть ли ее детали.Тип равен «бла».
Предполагаемый результат — вернуть данные с соответствующими деталями.введите результат. В настоящее время использую 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()
}
Ответ №1:
Вы почти на месте. Детализируйте поле Типы, используя 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()
}