非简约类型断言

我有以下内容,有效:


        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 语句。但是,我不确定如何支持它。想法?


料青山看我应如是
浏览 94回答 1
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())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go