Функция отражения исключает смешивание переключателя и оператора if в функции - PullRequest
0 голосов
/ 04 марта 2020

Этот вопрос в основном касается косметики, этот код выполняет свою работу, но я бы хотел использовать выражение switch в обоих случаях вместо смешивания if и 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 Ответ

1 голос
/ 04 марта 2020

Самое близкое, что вы можете сделать, это:

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