:= &rates.RatesRepository{}
countryRepo := &countries.CountriesRepository{}
ratesAll, err := rateRepo.All(dsn, config)
if err != nil {
logger.Err(fmt.Sprintf("Cannot fetch data, err: %v", err))
}
countryAll, err := countryRepo.All(dsn, config)
if err != nil {
logger.Err(fmt.Sprintf("Cannot fetch data, err: %v", err))
}
}
Вот есть куча репозиториев, и у всех них метод All() но мне не нравится эта макаронина, как-то возможно вообще сделать единный интерфейс? При этом у них всех разные структуры, и разные типы возвращаемых структур.
Например: []models.Rates для ratesAll
Мне просто интересно, можно ли как-то не повторять код в этом случае. Если я бахну обычный интерфейс, то у меня будет ошибка с несотвествиями типами, возвращаю []interfaces но там []models.Rates. Я конечно же могу бахнуть макаронину, но я уверен что есть более элегантное решение, подскажите кому не сложно.
Привести к условному: fetchData(repo, dsn, config)
в го да, копипастой все занимаются
Я знаю что это нормальная практика, просто ну реально выглядит не оч)
реально не очень потому го для простых крудов плохая и (дорогая и долгая) затея
а что не для простых крудов?
А на чем быстро и дёшево?
Скорее вопрос: на чем можно написать сложные круды и это было бы не очень дорого?
Ну я просто или делаю макаронину, или использую *invalid type через неименновые ссылки, но это как по мне еще хуже
не на го, копипасту я люблю, но не настолько
фреймворки для динамических языков, отталкивайся от этого)
Можно сделать интерфейсом с дженериком, но не советую на сильно привязываться к дженерик реализации и при появлении любой нетипичной логики сразу переделывать в отдельную реализацию
Обсуждают сегодня