类型断言非简约

时间:2019-03-06 18:43:51

标签: object go struct types assertion

我有以下可行的方法:

        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 个答案:

答案 0 :(得分:1)

我不太清楚您的问题,但是可以很容易地缩短您的操作而不会影响功能:

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