忽略golang反射中的大小写FieldByName

时间:2019-01-09 22:55:41

标签: go reflection reflect

我正在尝试使用golang中的反射功能从结构中读取数据,但是我想知道该怎么做才能忽略字段名称的大小写。

我有以下代码

std::ofstream

由于字段名的小写字母,上述函数同时返回type App struct{ AppID string Owner string DisplayName string } func Extract(app *App){ appData := reflect.ValueOf(app) appid := reflect.Indirect(appData).FieldByName("appid") fmt.Println(appid.String()) owner:=reflect.Indirect(appData).FieldByName("owner") fmt.Println(owner.String()) }

有没有办法让我忽略此案?

1 个答案:

答案 0 :(得分:2)

在查找字段时,使用Value.FieldByNameFuncstrings.ToLower忽略大小写:

func caseInsenstiveFieldByName(v reflect.Value, name string) reflect.Value {
    name = strings.ToLower(name)
    return v.FieldByNameFunc(func(n string) bool { return strings.ToLower(n) == name })
}

像这样使用它:

func Extract(app *App) {
    appData := reflect.ValueOf(app)
    appid := caseInsenstiveFieldByName(reflect.Indirect(appData), "appid")
    fmt.Println(appid.String())
    owner := caseInsenstiveFieldByName(reflect.Indirect(appData), "owner")
    fmt.Println(owner.String())
}

Run it on the Playground