我有以下内容,有效: reflectItem := reflect.ValueOf(dataStruct) subItem := reflectItem.FieldByName(subItemKey) switch subItem.Interface().(type) { case string: subItemVal := subItem.Interface().(string) searchData = bson.D{{"data." + strings.ToLower(subItemKey), subItemVal}} case int64: subItemVal := subItem.Interface().(int64) searchData = bson.D{{"data." + strings.ToLower(subItemKey), subItemVal}} }问题是这看起来非常不简约。我非常想简单地获取类型,subItem而无需在按名称找到字段后简单地断言其自己的类型的 switch 语句。但是,我不确定如何支持它。想法?
1 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
我不完全理解你的问题,但你正在做的事情可以很容易地缩短而不影响功能:
reflectItem := reflect.ValueOf(dataStruct)
subItem := reflectItem.FieldByName(subItemKey)
switch subItemVal := subItem.(type) {
case string:
searchData = bson.D{{"data." +
strings.ToLower(subItemKey), subItemVal}}
case int64:
searchData = bson.D{{"data." +
strings.ToLower(subItemKey), subItemVal}}
}
但除此之外,我认为在您的情况下根本不需要类型断言。这也应该有效:
reflectItem := reflect.ValueOf(dataStruct)
subItem := reflectItem.FieldByName(subItemKey)
searchData = bson.D{{"data."+strings.ToLower(subItemKey), subItem.Interface())
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消