猿问

在 golang 反射 FieldByName 中忽略大小写

我正在尝试使用 golang 中的反射从结构中读取,我能够成功地做到这一点,但我想知道我该怎么做才能忽略字段名称的大小写。


我有以下代码


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())

}

<invalid-value>由于字段名称的小写,上面的函数返回了 both 和 its


有什么办法可以忽略这个案例吗?


慕容708150
浏览 151回答 1
1回答

MMMHUHU

使用Value.FieldByNameFunc和strings.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())}在 Playground 上运行它。
随时随地看视频慕课网APP

相关分类

Go
我要回答