登录
首页 >  Golang >  Go问答

查找匹配值时的嵌套循环结构

来源:stackoverflow

时间:2024-02-20 20:39:26 193浏览 收藏

本篇文章给大家分享《查找匹配值时的嵌套循环结构》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我有一个像这样的 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的数据返回到结果。目前正在使用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()
 }

解决方案


你就快到了。使用 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()
}

Run it on the playground

今天关于《查找匹配值时的嵌套循环结构》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>