Ответы пользователя по тегу Go
  • Как организовать журнал событий в распределённой системе правильно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В данном задании непонятно насколько остро стоит необходимость именно в MQ системе.

    Можно начать просто с централизованного сбора логов. Мне кажется это проще
    чем строить кафку. Кроме того логгирование работает всегда, пока есть файловая
    система. А Кафка может быть недоступна какое-то количество минут или секунд в году.
    И вам надо будет думать что делать с событиями которые не ушли в Кафку. Блокировать.
    Дропать события. Или искать резервное мето куда форварднуть.
    Ответ написан
  • Как конвертировать .ogg в другой аудио-формат (.mp3, .wav) на Go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вариант

    $ oggdec file_example_OOG_5MG.ogg file_example_OOG_5MG.wav
    $ lame file_example_OOG_5MG.wav


    И из Go соотвественно надо вызвать внешний процесс

    exec.Command(".....")
    Ответ написан
    Комментировать
  • Почему некоторые программисты на GO работают с бд на голом SQL без ORM?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Скорее всего - специфика Go-задач.

    Дело в том что область применения ORM обычно ограничивается CRUD приложениями.
    И если мы заходим в область утилит для ETL и BigData то там оказывается что ORM вообще не нужен.
    Там работают во первых диалекты SQL, (Spark-SQL, Hive-SQL, MS U-SQL). Во вторых дизайн
    entities очень громоздкий (по 500-1000 колонок). И эти колонки еще и двигаются во времени
    следуя schema evolution на ходу. Тоесть добавляя новые колонки и расширяя типы от узких к широким.
    Представить себе ORM в таких условиях просто невозможно. Кроме того ORM кеширует объекты
    в коллекциях языка а это, сами понимаете не вопрос Bigdata и аналитики.

    Вообще ORM - это пугало, которым пугают на собеседованиях новичков. Для java-junior знание ORM - уже
    приравнивается к знанию сопромата и философии Конфуция. Знаешь ORM - получи должность
    в банке и сиди себе с умным видом на митинге.

    С моей точки зрения ORM ограничивает сильно в оптимизации запросов. Хинт уже так просто не поставить.

    Кроме ORM (Object-Relational-Mapping) есть и другая философия. Не от объектов к реляциям а наоборот.
    От базе к объектам. (Фреймворк MyBatis например). В нем причинно-следственная связь перевернута.
    Сначала таблицы и хранимые процедуры существовали в БД и уже потом, a posteriori, разработчик
    описывает для них мапппинги в обратном направлении.

    Существует также миф о том что ORM позволяет лихо прыгать по разным базам. Ни разу я для себя этот
    миф не подтвердил. Чем крупнее система - тем плотнее она сидит на лицензии от DBMS, и тем глубже
    она использует фичи этой DBMS (язык хранимых процедур особые режимы таблиц и партишенинга)
    и совершенно нет никакой надежды что миграция произойдет в один мышко-клик. Скорее наоборот.
    Миграция - это боль и слёзы и крупные платежи сектору разработки и облачным провайдерам.
    Баги и просадки перформанса в самых неожиданных местах БД.

    Хотя для вашего pet-project ORM вполне удобен особенно когда вы тестируете например веб-приложуху
    на H2 в перспективе с переходом на Postgres.
    Ответ написан
    Комментировать
  • Как улучшить качество декомпозиции в Go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    неприлично долго думаю над тем что нужно вынеси в отдельный пакет, а что достаточно вынести в отдельную структуру


    Такая-же проблема и у меня. Я тоже долго думаю над дизайном. Но суть в том что в большинстве задач
    ты и бизнес не всегда знаете куда пойдет проект дальше. И поэтому нарисовать идельный дизайн нельзя.
    Я-бы даже сказал что попытка сопровождать идеальный дизайн - может затянуть внедрение проекта.

    Поэтому просто откажись от декомпозиции. Пиши сначала прототип в олимпиадном стиле. Тоесть функция
    main - и погнал писать как чукча. Что вижу то и пою.

    И после того как ты напишешь 1000 строк например к тебе придет понимание как следует декомпозировать.
    И к этому моменту у тебя будут ДОКАЗАТЕЛЬСТВА выгодности твоего дизана. И теоретические споры можно
    уже исключить.
    Ответ написан
    1 комментарий
  • Я усложняю или так правильно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если ты начинающий - то лучше написать работающее приложение. А архитектура должна быть мотивированной.
    Вот в книжках по шаблонам проектирования так и пишут дескыть motivation.

    А если на пустом hello world делать архитектуру - то оно выглядит как-то странно. И принцип KISS/Yagni
    никто не отменял. И бритву Оккама.
    Ответ написан
    2 комментария
  • Библиотека для индексации документов Golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Когда-то давным давно использовали logrotate. Эта утилита просто дробила лог на дневные и часовые
    и прочие доли. Это позволяло искать быстрее. Если ты заранее знаешь что событие произошло например
    за последние сутки а не за последние 10 лет к примеру. Но logrotate может не работать под Windows.

    Коробочного решения для твоего вопроса я не знаю. Кроме Elastic ничего не приходит в голову.

    Есть еще программный продукт Splunk. Но я его никогда не использовал поэтому советовать не буду. Почитай сам.

    Вообще тебе нужен разработчик. Я думаю что дешевле всего трекать отдельные логи по событию event:login к примеру. Я так делал для сужения поиска. Для библиотек log4j это конфигурируется на уровне приложения.
    Там как-то добавляется appender + rule.
    Ответ написан
    Комментировать
  • Как под капотом реализованы интерфейсы в go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут пишут https://go.dev/tour/methods/9 весьма сухо.

    Interfaces
    An interface type is defined as a set of method signatures.
    A value of interface type can hold any value that implements those methods.


    Судя по всему Google не особо заинтересован описывать детали реализации интерфейса.
    Возможно на реализацию нет спеки. И Google планирует в будущем ее изменять.
    Ответ написан
    Комментировать
  • Как правильно запускать хранимые процедуры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно в проекте заводят отдельный модуль. Версионный контроль для БД. Можно на базе
    liquibase или flyway. Можно на базе каких-то Go-технологий.

    Но суть такова. Хранимка устанавливается синхронно с обновлением версии комплекса. Как
    часть установочного pipeline. И далее из кода ты ее просто вызываешь по имени.
    Ответ написан
    Комментировать
  • Почему падает скорость при скачивание с lux?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если youtube не предоставляет никаких гарантий относительно скорости - то это нормально. Это нормальная политика троттлинга всех "качков". В противном случае инфраструктура youtube упала-бы для всех остальных клиентов которые смотрят видео с браузеров. Ведь расчет средней нагрузки на сети идет как раз из обычных пользователей а не качков.

    Названий у таких алгоритмов много. Троттлинг, шейпинг, rate limiting, leaky bucket (протекающее ведро).
    Ответ написан
    3 комментария
  • Как сравнить значения из разных моделей в Go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    А попробуй замени это
    {{$projectID := .Note.ProjectID}}
    на константу
    {{$projectID := "00000011112222" }
    Ответ написан
    Комментировать
  • Как сжать файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для exe-шников еще в 90-е создавались не архиваторы а всякие "упаковщики". Из таковых я помню UPX https://upx.github.io/
    Ответ написан
    Комментировать
  • Как в golang заменить текст в консоли?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не знаю как в Го-шке. Но в сях есть два базовых подхода к работе с текстовой графикой.
    Первое - это печатать управляющией символы (backspace) чтоб стирать предыдущие.
    Так например работает текстовый архиватор Rar пока печатает прогресс. Все это на уровне STDOUT.

    Второе - это использовать библиотеки наподобие ncurses. Это такая Rich-графика в тексте.
    Можно делать красивые цветные текстовые таблицы наподобие TurboVision. И даже интерактивность.
    Диалоговые окна. Edit boxes e.t.c.
    Ответ написан
    Комментировать
  • Какой проект с открытым исходным кодом на go можно использовать, чтобы поучиться писать backend на go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот еще в гитхабе есть. Курьируемый список проектов. Про веб фреймворки
    https://github.com/avelino/awesome-go#web-frameworks

    Да и вообще просто поищи по ключевым словам backend/web.
    Ответ написан
  • Как запустить на фоне программу?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку речь идет об .exe то скорее всего автор хочет запускать без command-shell окошка.

    Вот так.
    start /B программа.exe
    Ну и цикл там сделать внутри.
    Ответ написан
  • Как сформировать деревья в json используя golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я-бы предложил для начала уйти от этого странного способа описанию деревьев к инверсному списку
    По сути - добавить еще одну колонку которая указывает на родителя.

    id name     path  parent
    -----------------------
    1  Беларусь 1     null
    2  Россия   2     null
    3  Минск    1.3   1
    4  Москва   2.4   2
    5  СПБ      2.5   2
    6  Невский  2.5.6 5


    Ну а дальше - select... connect prior и получим ранжированый курсор по дереву. Там-же будет
    доступно виртуальное поле level. И обходом этого курсора можно сделать JSON документ.
    Если level растет - то увеличиваем indentation и открываем вложенный элемент соотв.

    Если go-lang поддерживает stremable json writers то даже лучше.
    Ответ написан
    9 комментариев
  • Как конвертировать строку в any тип protobuf в Go?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Попробуй замени any на bytes.
    map<string,bytes> property = 1;
    Ответ написан
    Комментировать
  • Как считывать из бесконечного Stdout?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Читай не по строкам а по символам.
    Ответ написан
  • Какой лучший паттерн для тестирования дао на GO?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно там где танцует Go - там рядышком docker/kubernetes. Тоесть не проблема очень быстро поднять тестовую БД, наполнить ее данными и сразу прогнать все тесты по DAO.

    Иного способа протестировать DAO я думаю не существут. Смысл DAO - доступаться к внешним источникам данных. Если его мокать - то это уже не тестирование DAO а тестирование логики следующего уровня. Бизнес-логики и прочее.
    Ответ написан
    Комментировать
  • Всегда ли нужно переиспользовать переменные?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Оба примера - одинаковы по смыслу поэтому можно брать любой.

    Но если-бы я писал это на Rust/Scala то я всегда предпочитал бы константу. Ибо идеология и доказуемость значения в константе важнее гипотетических performance fixes.

    В данном случае - я все равно не специалист в Go и поэтому исходил бы из best practices и рекомендаций от самих создателей. Что они пишут по обработке ошибок? Дают ли они примеры? Вот если они в документации шлёпнут хотя-бы один сниппет с присвоением константы - то я скажу Окей мне все ясно и пойду писать код.

    Где там идолы что пишут у себя в pet-projects - надо смотреть.
    Ответ написан
    Комментировать
  • Как задать тип для структуры, где может быть массив или строка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ты переусложняешь. Сделай просто массив строк.

    {
        "data": ["string"]
    }


    Это покрывает все твои кейсы с 1 строкой и с null. И маппинг упрощается.
    Ответ написан