为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 反射 FieldByName 中忽略大小写

在 golang 反射 FieldByName 中忽略大小写

Go
慕容708150 2023-06-01 14:17:06
我正在尝试使用 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有什么办法可以忽略这个案例吗?
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

使用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 上运行它



查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信