anhckie
отсюда рожу еще глупый вопрос, но все таки - реализация крона в гошке? на пхп там кронтабом все рулится)
anhckie
а в гошке как)
anhckie
на тикерах и фор+селект ?
Andrey
ребята, ряд вопросов по чистой архитектуре или около того) вводные данные: в проекте будет с некоторой периодичностью (каждые n времени) посылаться запрос во внешние независимые друг от друга API (горутины и синк группы на первый взгляд). ответы этих API составляют 1 единственную сущность. вопросы: 1. в контексте чистой архитектуры юзкейсом является бизнес-логика? т.е. в рамках юзкейсов будет происходить запрос в api, получение ответа и его дальнейшее хранение? к апишкам надо будет аутентфикацию скорее всего приделывать - это тоже ведь зона ответственности юзкейса, как. японимаю? 2. для сохранения в бд хочу использовать "репозиторий". как я понимаю, репозиторий это именно тот слой, который будет заниматься крудом сущности при работе с базой?
я правильно понимаю что система делает запрос, получает ответ и сохраняет какие-то данные в базу?
anhckie
я правильно понимаю что система делает запрос, получает ответ и сохраняет какие-то данные в базу?
да. система сама по таймингу делает запросы во внешние апи и сохраняет данные в бд
Andrey
я правильно понимаю что система делает запрос, получает ответ и сохраняет какие-то данные в базу?
если так, то та часть что делает запрос это внешний слой, этот слой вызывает методы из слоя юзкейсов, эти методы что-то делают, внешнему слою это не важно, есть слой хранения данных, из юзкейсов вызываются методы которые сохраняют данные, да в вашем примере видимо юзкейс это такой вот проксик, что бы все по красоте и слои напрямую не связывать
Andrey
возможно я сумбурно рассказал, если не понятно то лучше переспросить )
anhckie
не, вроде все понял и, в целом, мое виденье таким и было)
anhckie
отсюда рожу еще глупый вопрос, но все таки - реализация крона в гошке? на пхп там кронтабом все рулится)
остался этот вопрос от меня и еще дополнительный - какой хттпсервер лучше подобрать для этого проекта?
anhckie
важна скорость вызовов по сети, как можно догадаться, и какие-то базовые вещи типа сделать аутентификацию и замапить на структуру респонсы)
anhckie
советовали fiber, в джине не вижу смысла - он достаточно круто и классный, но будет излишним
Patamen
советовали fiber, в джине не вижу смысла - он достаточно круто и классный, но будет излишним
Родился ради Файбера Топлю за Файбер с рождения Научился программировать ради Файбера Пошёл работать ради Файбера Готов умереть за Файбер
anhckie
а-а, сколько же от меня вопросов))... третий вопрос - насколько ок хранить креды к бд в репе в ямл-файлике?.. это же нарушение 12-факторного приложения. но насколько в реалиях это норм на коммерческих проектах ?
Илья
в енве храни
Илья
DB_PASS=123456789 go run .
anhckie
окей, но энвы должны будут на сервер откуда-то стянуться. при таком раскладе нужно будет юзать какой-нибудь vault?
Rostislav
Andrey
помогите люди добрые, пытаюсь скомпилить гошное приложение так что бы оно статически слинковалось с сишной либой, когда я это делаю он сыпет ошибки на гошный код который использует сишную либу
Илья
как билдишь? -extldflags='-static' ?
Null
OTUS совместно с CloudМТС проведет онлайн-митап, посвященный миграции на новые облачные сервисы Завтра в 18:00 мы расскажем о специфике миграции в облако МТС: разберем предпосылки, сценарии и технологии. Своим опытом поделятся практикующие эксперты: – Антон Губарев - разработчик Platform as a Service, Авито, – Василий Никулин - Руководитель направления поддержки продаж федеральных клиентов, Департамент облачного бизнеса, – Денис Кузьмичёв - Менеджер по продукту, CloudMТС Каждый участник расскажет о миграции с учетом личного опыта и экспертизы. В конце мероприятия вы сможете задать вопросы всем участникам и получить гайд по миграции с комментариями экспертов. Начинаем 6 сентября в 18:00 по Москве. Приходите по ссылке и приглашайте коллег! Реклама. Информация о рекламодателе на сайте otus.ru
anhckie
еще вопрос по докеру, где-то туплю. есть контейнер с мускулом, есть с аппкой. запускаю мускул контейнер, аппку просто билджу для быстроты разработки - коннект устанавливается только через localhost. если же в докере поднимаю и аппку, то коннект приходится устанавливать по названию контейнера мускула
anhckie
а может универсально как-то сделать же?)
anhckie
вот докер app | 2022/09/05 12:43:07 user:password@tcp(localhost)/parser?parseTime=true&readTimeout=15s&timeout=5s&writeTimeout=15s app | {"level":"info","time":"2022-09-05T12:43:07Z","caller":"/app/internal/app/app.go:21","message":"app - Run - db.New: db - NewMysql - db.Ping error: dial tcp 127.0.0.1:3306: connect: connection refused"}
anhckie
вот аппка вне докера u@vl-049 parser % go run cmd/app/main.go 2022/09/05 15:44:15 user:password@tcp(localhost)/parser?parseTime=true&readTimeout=15s&timeout=5s&writeTimeout=15s
anhckie
т,е, все ок во втором случае
Илья
а может универсально как-то сделать же?)
можно в композе переписать значение с помощью environment
anhckie
что ты имеешь ввиду?
Илья
anhckie
переделал считывание конфига с ямл файла на переменные окружения. в докер-компоузе, получается, определил их для контейнера, а энвы уже в зависимости от локалки, дева или прода будут тянуться из хранилища ключей любого, типа vault'a
anhckie
единственное, обнаружил что внутри контейнера аппка не может спарсить энв
anhckie
godotenv.Load(".env") test, _ := os.LookupEnv("DB_USERNAME") в контейнере будет пусто
anhckie
если же руками в компоузе укажу - будет то что надо. но в компоузе я такое хранить не хочу
anhckie
пользуюсь пакетом "github.com/ilyakaznacheev/cleanenv"
anhckie
энв что ли пробросить внутрь надо? примаунтить что ли)
Илья
в композе можешь сделать env_file: .env
Илья
а если локально, то я запускаю go run . через мейкфайл, который экспортирует все переменные
Tossadar
Можно, но .env семантически для другого.
Tossadar
Какой нибудь .app-env удобнее
Tossadar
.groupname.env
Tossadar
db.env
Tossadar
Не путать то что может быть нужно композу с тем что нужно приложению
Tossadar
Чтоб потом в рот никто не ебал за говно в проекте
Tossadar
Переменная для списка файлов которые запускать с композом, и переменная для названия проекта композа
anhckie
а если локально, то я запускаю go run . через мейкфайл, который экспортирует все переменные
это какой-то темплейт или ты при появлении новой энв допиливаешь мейкфайл?
Tossadar
anhckie
)))
anhckie
так и у меня сделано)
anhckie
но не припилил мейк-команду на ран проекта )
anhckie
лол, мистика. err := godotenv.Load(".env") if err != nil { return nil, err } 1. запускаю без контейнера - все ок 2. запуска в контейнере - получаю ошибку, что файл не найден. делаю без проверки на ошибку godotenv.Load(".env") - все збс и в контейнере тоже, переменные считываются. энв-файл лежит в корне проекта, в компоузе env_file: .env оставил без проверки, но ситуацию не понял
Tossadar
Меньше говна делать надо
anhckie
так а в чем конкретно говно?)
anhckie
есть энв-файл, с него читаются креды для коннектов. но и для докер-контейнера это надо
anhckie
типа, "а как надо было?" ,)
Gizzatullin
Привет всем! Посоветуйте курс с нуля😊
Eugene
го секс
Тимофей
Блин, у меня проблема. Проект в докере слишком долго билдится. Можете скинуть гайд на поэтапный запуск? типо как тут: https://youtu.be/whVHHmd7Ji0
Илья
убери флаг -a
Тимофей
я через compose билжу
Тимофей
ща засекуу
Тимофей
делаю минимальные изменения в коде
Тимофей
и жду...
Emin Zalaev
ждем
Тимофей
админ абуз...
Не ну это
Тимофей
так нельзя стикеры кидать
Emin Zalaev
арбуз
Илья
~25 секунд
это нормально