为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
摇曳的蔷薇 2022-05-18 16:43:52
这个问题主要是关于化妆品的,这段代码完成了它的预期工作,但我希望能够switch在两种情况下都使用该语句,而不是混合使用ifand switch。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 "<nil>"        }        field = field.Elem()    }    return fmt.Sprintf(format, field.Interface())}
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

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


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 "<nil>"

        }

        field = field.Elem()

        fallthrough

    default:

        return fmt.Sprintf("%v", field.Interface())

    }

}


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号