Так чтобы запихнуть в новую мапу значения слайсов 10 и 1000 из мапы groupCity нужно будет сделать тоже 2 цикла :D
так создай мапу и впихни туда все значения
зачем тебе два цикла
сначала иди по населению
Зачем? Это ведь вообще ничего не даст
Или ты имел ввиду ключи groupCity?
Anonymous
да
Anonymous
и проверяй равен ли город ключу
Anonymous
если равен брейк
Anonymous
если не равен удаляем его
Anonymous
все просто же
Emil
оффтоп, редиса пользователи есть? С трудом поднял в докере бота, редис жалуется на отсутствие конфига и на возможность недостатка памяти(что маловероятно, как я понял). Но оно работает. Можно в "продакшине" с этим жить?
Alexander
он пишет, что фоновое сохранение может отвалиться если память кончится, а не то, что память может кончиться
Emil
он пишет, что фоновое сохранение может отвалиться если память кончится, а не то, что память может кончиться
Хоть я и не совсем понял(в плане, если редис упадет при недостатке памяти, то ничего не сохранит?),в ишью гитхаба сказали, что волноваться стоит только при возможности перенасыщения оперативки. Просто хочу убедиться, с этими варнингами жить можно?
Alexander
ну редис же на диск все пишет в фоне, чтобы если что подняться
Alexander
я бы жил, все равно редис не для хранения основных данных
Emil
Спасибо) У меня он сутки хранит соответствия айди сообщений и пользователей В общем, надеюсь, не упадет, хотя и не супер критично в такой ситуации
Anonymous
я тоже это не понял если честно
🅞leksiy
Там возможно пропущен индекс: if city, in := cityPopulation[id]; in {
🅞leksiy
Ну я задачу не смотрел, если что
Anonymous
да забей
Anonymous
она не сложная
🅞leksiy
+
🅞leksiy
Просто сам приведенный кусок кода странный
Anonymous
основная проблема степика - это написание условий для задач
Anonymous
чтобы понять условие нужно читать комменты, а не само задание
Emil
Hackerrank самый дружелюбный мне показался)
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
Точнее наверно архитектура таблицы 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
Там возможно пропущен индекс: if city, in := cityPopulation[id]; in {
Спасибо тебе, добрый человек! Благодаря твоей внимательности я все-таки решил задачу своим способом!! :D
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
Спасибо Так и поступлю)
Emil
это твой бот тут писал xd
У меня добрые боты)
Anonymous
есть пример большого проекта на го с норм архитектурой?
B
Всем доброго дня. Не увидел нигде правил по тому в каком формате можно писать в группу вопросы, поэтому оформил так. Пытаюсь подтянуть новую версию пакета, проставил в go.mod, выдаёт следующую ошибку go list -m: git._n_.net/golang/_n_@v1.2.0: verifying go.mod: git._n_.net/golang/_n_@v1.2.0/go.mod: reading https://sum.golang.org/lookup/git._n_.net/golang/_n_@v1.2.0: 410 Gone server response: not found: git._n_.net/golang/_n_@v1.2.0: invalid version: git ls-remote -q origin in /tmp/gopath/pkg/mod/cache/vcs/e5b01f4cfa7f619b5e1802f2836b60fc27c5f7dbe56abf90a035ab02419cff7e: exit status 128: fatal: could not read Username for 'https://git._n_.net': terminal prompts disabled Confirm the import path was entered correctly. If this is a private repository, see https://golang.org/doc/faq#git_https for additional information. Рекомендации приведённые по ссылке (https://golang.org/doc/faq#git_https) из ошибки не помогли. Правда не уверен что правильно реализовал первый вариант из рекомендации. По второму в интернете полно примеров что у людей всё начинало работать, но не в моём случае. .gitconfig [url "git@git._n_.net:"] insteadOf = https://git._n_.net/ [user] name = _n_ email = _n_._n_@_n_.ru При клонировании репозиториев всё работает, пароль не запрашивает. Компьютер перезагружал. Сталкивался кто с такой проблемой и как решили?
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
Всем доброго дня. Не увидел нигде правил по тому в каком формате можно писать в группу вопросы, поэтому оформил так. Пытаюсь подтянуть новую версию пакета, проставил в go.mod, выдаёт следующую ошибку go list -m: git._n_.net/golang/_n_@v1.2.0: verifying go.mod: git._n_.net/golang/_n_@v1.2.0/go.mod: reading https://sum.golang.org/lookup/git._n_.net/golang/_n_@v1.2.0: 410 Gone server response: not found: git._n_.net/golang/_n_@v1.2.0: invalid version: git ls-remote -q origin in /tmp/gopath/pkg/mod/cache/vcs/e5b01f4cfa7f619b5e1802f2836b60fc27c5f7dbe56abf90a035ab02419cff7e: exit status 128: fatal: could not read Username for 'https://git._n_.net': terminal prompts disabled Confirm the import path was entered correctly. If this is a private repository, see https://golang.org/doc/faq#git_https for additional information. Рекомендации приведённые по ссылке (https://golang.org/doc/faq#git_https) из ошибки не помогли. Правда не уверен что правильно реализовал первый вариант из рекомендации. По второму в интернете полно примеров что у людей всё начинало работать, но не в моём случае. .gitconfig [url "git@git._n_.net:"] insteadOf = https://git._n_.net/ [user] name = _n_ email = _n_._n_@_n_.ru При клонировании репозиториев всё работает, пароль не запрашивает. Компьютер перезагружал. Сталкивался кто с такой проблемой и как решили?
Go не мог нормально сверить чексумму. Прописал go env -w GOPRIVATE=git._n_.net и всё подтянулось
𝕌ℕ𝔼𝕏ℙ𝔼ℂ𝕋𝔼𝔻
А как юзать интерфейсы в конструкторе зависимостей?
Maks
интерфейс нужен еще для того, что бы можно было разные модели передавать с общим интерфейсом но с разной внутренней реализацией)
Maks
Ну тут да
Maks
просто это не обязательно
Maks
но вообще да)
Maks
у него методы эти не реализованы нигде
Maks
вроде как
Denis
Вообще-то детали реализации скрываем неэкспортируемыми методами/переменными, в конструкторе возвращаем указатель, интерфейс описываем там, где он нужен
Maks
Чет мне jwt кажется парашей
Denis
Наоборот, гибкость теряется если возвращать интерфейс, т.к никогда не знаешь, кому какие методы потребуется от *service. Понятно, что принимать надо интерфейсы, передавать указатели
Maks
Нет, гибкость это когда ты весь код на интерфейсах пишешь. Метод который принимает примитивы и интерфейсы, и возвращает примитивы и интерфейсы. В большей степени должно быть так. Кому и какие методы потребуются - это задача уже архитектурно правильно проект построить мне кажется.
Denis
Нет, гибкость это когда ты весь код на интерфейсах пишешь. Метод который принимает примитивы и интерфейсы, и возвращает примитивы и интерфейсы. В большей степени должно быть так. Кому и какие методы потребуются - это задача уже архитектурно правильно проект построить мне кажется.
Т.е., если у *service есть допустим 3 экспортируемых метода (может быть и больше), предлагаете в конструкторе возвращать мега-интерфейс? На тот случай, если одному пакету от вашего сервиса потребуется один метод, другому-другие?
Maks
Твой сервис реализует определенный набор методов. Не обязательно их все использовать. Если у тебя например есть какая то фабрика, то она будет возвращать интерфейс, а не конкретную его реализацию.
Maks
Ты можешь сделать 3 интерфейса и 3 метода возвращающих разные интерфейсы
Maks
какая разница ты будешь конкретную реализацию юзать или нет
Maks
ты сейчас говоришь у сервис 3 экспортируемых метода
Maks
ты его возвращаешь
Maks
значит пользователю будут доступны все 3 метода, разве нет?
Maks
если ты вернешь serviceInterface то будет тоже самое
Denis
если ты вернешь serviceInterface то будет тоже самое
Да, если все экспортируемые методы запихнуть в мега-интерфейс, будет то же самое
Maks
блин, для чего тебе тогда вообще интерфейсы нужны
Denis
Тот, кто использует твой сервис, ждёт только узкие интерфейсы
Denis
блин, для чего тебе тогда вообще интерфейсы нужны
Я не знаю, зачем вы предлагаете в конструкторе интерфейс возвращать, интерфейсы нужны тем, кто пользуется
Vladyslav
Чет мне jwt кажется парашей
Я вот потыкал их для юзерских сессий и переписал все на куки🤣 Но джоты удобно использовать для коммуникации между сервисами
Denis
Ну и Грирорию отвечу :) Здесь нет зависимостей от того, что возвращает конструктор. Если "куча кода" использует *Service как объект - то да, гибкость теряется, а если же интерфейсы (более узкие, содержащие только те функции, что ей нужны) - то ничего перелопачивать не придется. Это никак не зависит от того, что возвращает конструктор Sevice
Denis
Ещё могу добавить, что интерфейсы желательно объявлять там, где они используются, а не тянуть из других пакетов - это уменьшает время компиляции и вообще дерево зависимостей
Denis
Все от ситуации зависит, если есть 10 мест, то это уже контракт, который нужен многим, можно его в одном месте описать
Denis
Я бы вынес в отдельный пакет с контрактами
Denis
Интерфейс - в общем случае не должен пренадлежать тому, кто его реализует. Тот кто использует методы конкретной реализации по хорошему вообще не должен знать про пакет, где эта конкретная реализация существует
Anonymous
это будет говно код, если я в login.go буду обращаться к upload.go и создавать объект структуры, которая лежит в upload.go?. Вот пример если плохо оюъяснил....
Alexander
Что ты этим кодом хочешь изобразить?