᠌
Так чтобы запихнуть в новую мапу значения слайсов 10 и 1000 из мапы groupCity нужно будет сделать тоже 2 цикла :D
᠌
так создай мапу и впихни туда все значения
᠌
зачем тебе два цикла
᠌
Или ты имел ввиду ключи groupCity?
Anonymous
да
Anonymous
и проверяй равен ли город ключу
Anonymous
если равен брейк
Anonymous
если не равен удаляем его
Anonymous
все просто же
Emil
оффтоп, редиса пользователи есть? С трудом поднял в докере бота, редис жалуется на отсутствие конфига и на возможность недостатка памяти(что маловероятно, как я понял). Но оно работает. Можно в "продакшине" с этим жить?
Alexander
он пишет, что фоновое сохранение может отвалиться если память кончится, а не то, что память может кончиться
Alexander
ну редис же на диск все пишет в фоне, чтобы если что подняться
Alexander
я бы жил, все равно редис не для хранения основных данных
Emil
Спасибо)
У меня он сутки хранит соответствия айди сообщений и пользователей
В общем, надеюсь, не упадет, хотя и не супер критично в такой ситуации
🅞leksiy
Anonymous
я тоже это не понял если честно
🅞leksiy
Там возможно пропущен индекс:
if city, in := cityPopulation[id]; in {
🅞leksiy
Ну я задачу не смотрел, если что
Anonymous
да забей
Anonymous
она не сложная
🅞leksiy
+
🅞leksiy
Просто сам приведенный кусок кода странный
Anonymous
основная проблема степика - это написание условий для задач
Anonymous
чтобы понять условие нужно читать комменты, а не само задание
Anonymous
Emil
Hackerrank самый дружелюбный мне показался)
Anonymous
Anonymous
ну и лит нужно чекать параллельно
Anonymous
если стф интересует то стф365
Rinat
👋, как в go-pg выбрать один столбец из другой таблицы? Если я убираю Column(firstLang), то всё работает, но выдаются сразу все языки, а мне нужно один из запроса
err := dbConnect.
Model(&books).Where("lang = ?", lang).
Relation("Authors").
Relation("Translation").Column(firstLang).
Select()
а если я оставляю Column(firstLang) пишет Error while getting books, Reason: pg: can't find column=ru in model=Books
Rinat
если кто знает как это сделать через любую orm - напишите пожалуйста как это делается
Anonymous
Anonymous
Точнее наверно архитектура таблицы Translation вызывает вопросы, у тебя там похоже bookID, ru, en, es, ch итд столбцы, не лучше было bookID, lang, text сделать, и оно прекрастно джойном работать будет, даже от переменной lang в таблице book избавиться при желании можно будет
Null
Продвинутый Golang. Урок 6: REST API, middleware, обработка ошибок
https://tproger.ru/video/prodvinutyj-golang-urok-6-rest-api-middleware-obrabotka-oshibok/
@Golang_google
Emil
Подскажите, это похоже на что-то логичное в плане чистой архитектуры или я понапихал не туда зависимостей?
᠌
так создай мапу и впихни туда все значения
Без создания мапы, без вложенных циклов, своим способом решил 😪🤗
for _, city := range groupCity[10] {
if _, in := cityPopulation[city]; in {
delete(cityPopulation, city)
}
}
for _, city := range groupCity[1000] {
if _, in := cityPopulation[city]; in {
delete(cityPopulation, city)
}
}
Все равно спасибо что пытался помочь :)
Emil
(наверное, привык, думал, лишеним не будет, мб как объединение методов, для тестов вероятно не пригодится)
᠌
time complexity То есть я просто пытался понять почему мое решение не работает, и @night_codes заметил что я просто не указал [key] мапе cityPopulation в проверке условия. Т.е. просто моя невнимательность )
Emil
Спасибо
Так и поступлю)
Anonymous
Emil
Anonymous
есть пример большого проекта на го с норм архитектурой?
Null
Ждем Go-разработчиков на Weekend Offer 23-24 октября: одни выходные, новая работа, бонусы к зарплате
Даже если ваш телефон разрывается от звонков компаний, которые хотят вас захантить, мы можем предложить условия круче!
• Быстрый рост: повышайте экспертизу с нами в выбранном вами направлении.
• Бонус в две зарплаты при получении оффера 23-24 октября.
• Возможность влиять на бизнес: мы прислушиваемся к каждой из наших 39 продуктовых команд.
• Highload не на словах, а на деле: наша платформа одновременно доставляет миллионы заказов и поддерживает 45 000 партнёров в 323 городах России.
• Работа в команде лучших: 75% технического департамента – специалисты уровня Senior.
И это далеко не все самое классное, что ждет вас, если вы примете участие в Weekend Offer и получите приглашение в одну из технических команд Delivery Club.
Давайте строить фудтех вместе!
Записаться и узнать подробности: https://tech.delivery-club.ru/goweekend
B
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
А как юзать интерфейсы в конструкторе зависимостей?
Maks
интерфейс нужен еще для того, что бы можно было разные модели передавать с общим интерфейсом но с разной внутренней реализацией)
Maks
Ну тут да
Maks
просто это не обязательно
Maks
но вообще да)
Maks
у него методы эти не реализованы нигде
Maks
вроде как
Denis
Вообще-то детали реализации скрываем неэкспортируемыми методами/переменными, в конструкторе возвращаем указатель, интерфейс описываем там, где он нужен
Maks
Чет мне jwt кажется парашей
Denis
Наоборот, гибкость теряется если возвращать интерфейс, т.к никогда не знаешь, кому какие методы потребуется от *service. Понятно, что принимать надо интерфейсы, передавать указатели
Maks
Нет, гибкость это когда ты весь код на интерфейсах пишешь. Метод который принимает примитивы и интерфейсы, и возвращает примитивы и интерфейсы. В большей степени должно быть так. Кому и какие методы потребуются - это задача уже архитектурно правильно проект построить мне кажется.
Denis
Maks
Твой сервис реализует определенный набор методов. Не обязательно их все использовать. Если у тебя например есть какая то фабрика, то она будет возвращать интерфейс, а не конкретную его реализацию.
Maks
Ты можешь сделать 3 интерфейса и 3 метода возвращающих разные интерфейсы
Maks
какая разница ты будешь конкретную реализацию юзать или нет
Maks
ты сейчас говоришь у сервис 3 экспортируемых метода
Maks
ты его возвращаешь
Maks
значит пользователю будут доступны все 3 метода, разве нет?
Maks
если ты вернешь serviceInterface то будет тоже самое
Denis
Maks
блин, для чего тебе тогда вообще интерфейсы нужны
Denis
Тот, кто использует твой сервис, ждёт только узкие интерфейсы
Vladyslav
Чет мне jwt кажется парашей
Я вот потыкал их для юзерских сессий и переписал все на куки🤣
Но джоты удобно использовать для коммуникации между сервисами
Denis
Ну и Грирорию отвечу :) Здесь нет зависимостей от того, что возвращает конструктор. Если "куча кода" использует *Service как объект - то да, гибкость теряется, а если же интерфейсы (более узкие, содержащие только те функции, что ей нужны) - то ничего перелопачивать не придется. Это никак не зависит от того, что возвращает конструктор Sevice
Denis
Ещё могу добавить, что интерфейсы желательно объявлять там, где они используются, а не тянуть из других пакетов - это уменьшает время компиляции и вообще дерево зависимостей
Denis
Все от ситуации зависит, если есть 10 мест, то это уже контракт, который нужен многим, можно его в одном месте описать
Denis
Я бы вынес в отдельный пакет с контрактами
Denis
Интерфейс - в общем случае не должен пренадлежать тому, кто его реализует. Тот кто использует методы конкретной реализации по хорошему вообще не должен знать про пакет, где эта конкретная реализация существует
Anonymous
это будет говно код, если я в login.go буду обращаться к upload.go и создавать объект структуры, которая лежит в upload.go?. Вот пример если плохо оюъяснил....
Alexander
Что ты этим кодом хочешь изобразить?