猿问

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

这个问题主要是关于化妆品的,这段代码完成了它的预期工作,但我希望能够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())

}


摇曳的蔷薇
浏览 108回答 1
1回答

Helenr

您可以做的最接近的事情是:func isDateTime(field reflect.Value) bool {&nbsp; &nbsp; _, result := field.Interface().(strfmt.DateTime)&nbsp; &nbsp; return result}func fieldValue(field reflect.Value) string {&nbsp; &nbsp; switch {&nbsp; &nbsp; case isDateTime(field):&nbsp; &nbsp; &nbsp; &nbsp; return field.Interface().(strfmt.DateTime).String()&nbsp; &nbsp; case field.Kind() == reflect.Ptr:&nbsp; &nbsp; &nbsp; &nbsp; if field.IsNil() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "<nil>"&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; field = field.Elem()&nbsp; &nbsp; &nbsp; &nbsp; fallthrough&nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; return fmt.Sprintf("%v", field.Interface())&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Go
我要回答