Anonymous
Rostislav
Интересно, что имел в виду автор под масштабируемостью? Фреймворк прибитый гвоздями к приложению? Или может начало проектирования приложения с БД. Не совсем понятно конечно
Артем
Привет! Подскажите какую нибудь либу для генерации excel файлов из json. JSON могут быть разной структуры, под каждую не охота писать вручную
Артем
Eldos
Eldos
Сорри, понял 😅
Vladislav
Vladislav
или может это надо разбить на две подзадачи? прочитать жсон и записать эксель-файл
whois
Друзья, может кто-то сталкивался.
Когда в zap логере дергаю функцию with(fields ...Field), она возвращает новый инстанс логера.
Но есть проблема - сбрасывается настройка - формат логирования. Т.е. вместо "console", начинает использовать видимо дефолтный формат json.
log, err := loggerInit()
if err != nil {
panic(err)
}
log.Info("message")
log2 := log.With(zap.String("key-1", "val-1"))
log2.Info("message-2")
Может кто-то уже сталкивался с такой проблемой, подскажите плиз, как решали?
Илья
дополнительные поля пишутся в жсон
ILIA
anhckie
вводные данные:
есть сервис, в рамках которого будут запускаться процессы в отдельных горутинах каждые n времени.
проект разрабатываю на базе подхода «чистая архитектура» (слои репозитории, энтити, юзкейсов, протоколов).
проблема: в кроне будет происходить итерационный вызов N апишек, ссылки на которые лежат в БД. если данные были получены из первой, то в следующие мы не пойдем, а запишем в базу и задачу считаем выполненной.
(!) чтобы понять, в какие апишки из всех, что лежат в базе, нужно ходить - у них есть статус 1/0.
так вот, политики работы с апишками могут отличаться, но не особо критично.
сейчас у меня в микросервисе 1 основной юзкейс - дернуть апишку, получить строку и все. юзкейс работает с репозиториями.
вопрос - как это организовать, если логика работы с апишкой может отличаться?
ну типа получил я 2 апишки из бд, надо начинать работать с первой. где хранить логику работы с этой апишкой)
anhckie
сумбурно объяснил, возможно, но если что попробую еще раз
anhckie
проблема именно в том, что получив n адресов апи из базы, нужно итерационно пробовать работать с каждой из них.
заранее я не знаю какие это апи могут быть, очевидно.
где хранить логику работы с ними и вообще как соотнести строку, полученную из бд, с где-то лежащей логикой апи)
anhckie
в пхп это можно было накостылять динамическими переменными и инклюдами, гоу же не может так во, он должен знать имя уже во время компайлтайма
anhckie
может, вообще подход тут поменять надо как-то
anhckie
я ж не хочу иф елсе делать и сравнивать с константами и там наливать логику работы с апи
anhckie
либо же на уровне транспорта ходить в базу, получать апишки, а потом… а потом мне все равно надо понять к какой апи какую логику прикрутить)
anhckie
короче, мысли вслух.
поделитесь и вы))
Сергей
Паттерн стратегия напрашивается.
anhckie
типа, написать интерфейс, написать файлы с апишками, которые бы реализовывали этот интерфейс по-своему - я так и планирую (кстати, не знал, что это называется стратегией 😅).
проблема в том, как клиентскому коду понять, какую стратегию использовать, из полученных в базе?
ну лежит у меня в базе урл и название апишки в стринге.
как мне это замапить на конкретную стратегию?
anhckie
по сути, спотыкаюсь об какой-то тривиальный вопрос, походу)
anhckie
https://refactoring.guru/ru/design-patterns/strategy/go/example
Rostislav
switch
case
anhckie
вот я этого избежать хочу, но не пойму как
anhckie
в пыхе динамическими переменными зарешалось бы, в гошке нет альтернатив?
Rostislav
Ну это надо сделать на начальном этапе. Получили из бд какой-то урл, определили какая для него нужна логика, создали соответствующий объект, у которого метод работает так как нужно для этого урла. А потом все созданные таким образом объекты запускаем вызовом этого метода
Rostislav
Rostislav
Maks
Можно так же в бд идентификатор стратегии хранить а стратегии в мапе
Maks
и из мапы по ключу брать
Maks
Что бы не свитчкейсить
Maks
они же в любом случае должны быть все инициализированны заранее (точнее могут быть)
Maks
Можно сделать что бы инициализировались когда по ключу не найдено
anhckie
если я там заранее по ключам буду распихивать стратегии
anhckie
если я тебя правильно понял
Maks
А ты хочешь каждый раз генерировать новый класс?
Maks
точнее структуру
anhckie
Maks
со стратегией
anhckie
хочу динамически подставлять в свой юзкейс эту структуру-стратегию)
anhckie
но походу оно только или свич кейсом решается, или преаллоцированной мапой со списком апишек и стратегий
Maks
Так ты и подставляй. Просто бери из мапы. А так ты каждый раз будешь инициализировать структуру когда тебе нужно будет стратегию заюзать какую то
Maks
Если через свитч кейс
Maks
а оно тебе надо?
Rostislav
Maks
Единственное, когда у тебя используется заранее проинициализированная мапа со стратегиями, нельзя что бы стратегия внутри себя какие то переменные хранила которые могут меняться в процессе выполнения стратегии.
anhckie
окей, мапа выглядит следующим образом:
ключ - строка с названием апишки
значение - структура-стратегия, реализовывающая их интерфейс.
вопрос - апишек на данный момент до 60 штук, «включенных» только 5.
мне надо все 60 в мапу запихнуть, ведь вдруг какую-то из них включат в какой-то админке?)
Rostislav
anhckie
и момент хардкода вызывает сомнения, что я в адеквате ))
anhckie
Maks
почему?
Потому что если у тебя будет 2 параллельных вызова а эта переменная где то будет использоваться, то ты ее можешь перезаписать и логика сломается. У тебя же приложение живет пока запущено, в отличии от пыхи
anhckie
а, ты в плане тред сейфа) да, согласен
Maks
Я на джаве когда плагин пилил для жиры жирный - у нас был плавающий баг)
Maks
Как раз с этим было связано)
anhckie
Maks
Там переменная локальная была внутри класса и она в методах юзалась, но менялась когда приходил запрос. Все переменные надо передавать в качестве аргументов)
anhckie
Maks
Как же я долго искал нормальную клаву с двумя беспроводными интерфейсами в замет g613) думал взять g915tkl но она плохого качества за свои бабки так темболее. Нашел Varmilo Cliff Bot: Lie VCS87. Годнота относительно.
Rostislav
Maks
Мне просто нужно 2.4Ghz + синийзуб. Что бы я мог легко переключать клаву между ПК и рабочим ноутом)
Не ну это
Maks
мне на 915 не понравилось крепление кейкапов. Оч тонкий пластик. Не редко пишут что ломается
Сергей
В Php я стратегии накидывал в провайдер. У каждой стратегии есть метод support, где проверяется подходит она или нет.
В провайдере метод getStrategy, где в цикле перебираются стратегии и в зависимости от условия выбирается нужная
Юра (Юрий Александрович)
Реализациями могут быть функциии одигаковой сигнатуры или структуры одинакового интерфейса.
Юра (Юрий Александрович)
Юра (Юрий Александрович)
В любом случае, вам нужно не просто накидать всяких реализаций в ваш пакет, а собрать из них при запуске приложения некоторую структуру, с которой потом работать.
Юра (Юрий Александрович)
Можно попробовать так ( но это гипотеза, пусть уточнят те, кто хорошо знает рефлексию): рефлексией проанализировать наш пекейдж, найти в нем все типы, реализующие определенный интерфейс, и собрать из них рабочую структуру. В .Net я бы сделал именно так. Возможно, в Го рефлексия это же позволяет.
deusbog
Всем прив
deusbog
Кто то может написать мне парсер Unix porn для определения самого популярного рабочего стола?
deusbog
Денег нет
deusbog
Так что тот кто возьмётся за эту задачу придётся работать на чистом интузиазме.
Alexey
Шут гороховый чисто
Anton
> Junior DevOps engineer