我有以下,有效:
reflectItem:= reflect.ValueOf(dataStruct) subItem:= reflectItem.FieldByName(subItemKey) switch subItem.Interface()。(type){ …
我并不完全理解您的问题,但您可以轻松缩短所做的事情,而不会影响功能:
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())