go - 循环结构并检查嵌套以查找匹配值
问题描述
我有一个像这样的 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
}
我想遍历每个 Audit 子结构并检查其 Details.Type 是否等于“blah”。
预期的结果是将具有匹配 details.type 的数据返回到结果。目前正在使用反射但无法解决。
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()
}
解决方案
你快到了。使用 FieldByName 深入到 Types 字段:
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()
}
推荐阅读
- php - 如何避免 forech 循环以及我们如何使用数组列
- python-3.x - 如何将分隔符附加到刮掉的桌子上?
- c# - 如何从 2 个不同的字符串中获取字典中的值
- javascript - 如何计算摩纳哥差异编辑器中更改的行数?
- angular - 为什么http客户端请求返回错误作为字符串而不是HttpErrorResponse?
- laravel - 如何在 eloquent 中定义逆多态多对可能关系?
- python-3.x - 尝试通过 Web 套接字连接,它总是得到 HTTP/1.1 405 Method Not Allowed 错误
- azure - Azure 服务总线获取对消息的响应
- python - 如何有效地调用另一个函数或另一个进程而不等待响应
- php - 如何在一个数组中组合多个变量