登录
首页 >  Golang >  Go问答

Reflect 函数消除了函数中 switch 和 if 语句的混合

来源:stackoverflow

时间:2024-04-16 17:30:19 143浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《Reflect 函数消除了函数中 switch 和 if 语句的混合》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

这个问题主要是关于化妆品的,这段代码完成了它的预期工作,但我希望能够在这两种情况下使用 switch 语句,而不是混合 ifswitch

func fieldValue(field reflect.Value) string {
    format := "%v"
    if stringer, ok := field.Interface().(strfmt.DateTime); ok {
        return fmt.Sprintf(format, stringer.String())
    }
    switch field.Kind() {
    case reflect.Ptr:
        if field.IsNil() {
            return ""
        }
        field = field.Elem()
    }
    return fmt.Sprintf(format, field.Interface())
}

解决方案


您可以做的最接近的事情是:

func isDateTime(field reflect.Value) bool {
    _, result := field.Interface().(strfmt.DateTime)
    return result
}

func fieldValue(field reflect.Value) string {
    switch {
    case isDateTime(field):
        return field.Interface().(strfmt.DateTime).String()
    case field.Kind() == reflect.Ptr:
        if field.IsNil() {
            return ""
        }
        field = field.Elem()
        fallthrough
    default:
        return fmt.Sprintf("%v", field.Interface())
    }
}

今天关于《Reflect 函数消除了函数中 switch 和 if 语句的混合》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>