for index, arg := range args {
switch v := arg.(type) {
case *int:
if v != nil {
return hasNilParameter
}
v = new(int)
args[index] = v
case *string:
if v != nil {
return hasNilParameter
}
v = new(string)
args[index] = v
case *time.Time:
if v != nil {
return hasNilParameter
}
v = &time.Time{}
args[index] = v
default:
return unknownType
}
}
return nil
}
```
Она должна nil указатели разных типов привести к default value этого типа. Как бы можно это сделать?
Разобрался. Если кому интересно, то сделал я это вот так ``` func nilToDefault(args ...interface{}) error { for _, arg := range args { switch v := arg.(type) { case **int: if *v != nil { continue } *v = new(int) case **string: if *v != nil { continue } *v = new(string) case **time.Time: if *v != nil { continue } *v = &time.Time{} default: return unknownType } } return nil } ```
reflect может поможет?
А смысл этой функции? Переменная v нигде не возвращается, по факту функция не делает ничего, проводит проверку и всё. Какое применение у такой функции?
В аргументы этой функции подаются указатели. Если они nil, то им присваивается дефолтное значение их типа. Если не nil, то остаются значения, как были
Но зачем? Какую проблему вы решаете?
Огромное количество указателей разных типов перевожу в дефолтное значение
default value для любого указателя это nil
Обсуждают сегодня