我正在尝试使用 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())
}
- 1 回答
- 0 关注
- 150 浏览
添加回答
举报
0/150
提交
取消