Ответы пользователя по тегу Go
  • Что по операционным системам лучше подтянуть Go разработчику?

    @rPman
    Так как вопрос общий и не конкретизирует будущую работу и выбор ОС, то настоятельно рекомендую почитать про сети и типовые конфигурации, с ними больше всего работы и она универсальна, для любой ОС.

    Следующий кандидат на изучение IPC (Inter Process Communication), мультипоточность, синхронизация, семафоры, мьютексы и т.п. Можно полистать про пайпы, они по разному работают в разных ОС т в каком то смысле это одновременно и сети и IPC.

    До кучи - работа со временем, не совсем ОС но она чуть чуть может отличаться от ОС или выбранного фреймворка.

    Ну и совсем голая практика - работа с GUI, базовые отличия и особенности (например почему в linux GUI это сервер, или почему в windows, 'схватив' заголовок окна мышкой, можно поставить на паузу стартовый поток).

    Судя по вопросам да и вообще, очень многим не хватает базовых знаний в этой области, применимость, конкретной практики. Какой только маразм не изобретают...
    Ответ написан
    Комментировать
  • Библиотека для индексации документов Golang?

    @rPman
    Либо менять способ хранения лога на что то структурированное (даже если это будет sqlite база без индексов, уже хорошо, но лучше конечно полноценную БД) и в последствии не знать горя, либо пилить сервис, который будет на лету мониторить изменения в логах и заливать опять же их в структурированную БД.

    Все зависит от типов запросов, от того, какие индексы тебе нужны, если хватит индекса по времени, уже считай повезло (когда при анализе приходится сканировать весь массив данных за запрошенный интервал) и данные можно будет хранить, поделив на интервалы (в реляционных базах есть для этого инструменты).

    Под БД я имею в виду любой инструмент который умеет индексировать записи и выделять структурные элементы (твои event: role: time: и тд.), причем возможна ситуация, когда сами данные дополнительно хранить не обязательно (хватит только индекса и информации о том где эти данные лежат),
    в одном месте
    у меня было (непродолжительное время как эксперимент) так, данные хранились в текстовом дампе, утилита индексации обновления данных вычисляла и хранила информацию о именах файлов и смещении в них для каждой записи, а по каждой записи для полей смещение внутри записи и длину строки (там были только числа и строки), информация об этом была значительно компактнее чем делать их копию в базу... но и индексировать ничего не надо было кроме времени.


    p.s. От текстовых, а точнее не структурированных, логов лучше избавляться с самого начала разработки, причем буквально на столько, чтобы приложение вообще ничего не выдавало в stdout и stderr (кроме собственно хелпа и данных, если это потоковые инструменты), причем конечно красивее централизованно красиво собирать логи по сети в хорошую БД, но не обязательно, иногда даже простая сериализация объектов в php:serialize/json по событиям по строчкам в тот же лог файл уже лучше, ведь такие файлы обрабатывать на порядок проще (json можно парсить на скорости гигабайты в секунду потоковыми парсерами, и это в одном потоке)... ну на это на сколько я знаю куча библиотек написано, в т.ч. прямо встроенные в ОС
    Ответ написан
    Комментировать
  • Отследить пополнение Bitcoin кошелька?

    @rPman
    Кошелек - это набор адресов для пополнения, их список у тебя должен быть (в этом и есть смысл работы), смотришь среди входов и выходов транзакции на твои адреса, и соответственно вычитаешь или плюсуешь баланс.

    bitcoin-core умеет это делать, если добавить требуемые адреса в кошелек (можно даже только публичные адреса), тогда баланс можно запросить rpc запросом

    p.s. есть ключ командной строки ноды, позволяющей запускать пользовательское приложение на каждый новый блок, и даже появление транзакции кошелька в мемпуле, кажется -notify.
    Там еще добавили новый протокол, ZeroMQ
    Ответ написан
    4 комментария
  • Go. Что делать, если в коде много схожих друг с другом функций?

    @rPman
    Я бы оставил так и не усложнял логику
    Ответ написан
    Комментировать
  • Где хранить данные?

    @rPman
    В своей базе данных и храни, незачем создавать новые сущности там где они не требуются
    Если базу данных трогать нельзя, создай свою, любую, вон отличный пример с sqlite, локальная база на основе файла, производительная, полнофункциональная sql (без особой переделки можно потом сменить на другую) и главное не требует никакого обслуживания и настройки.
    Ответ написан
    Комментировать
  • Как приложение electron положить скрипт написанный на golang?

    @rPman
    скрипт придется компилировать, либо заранее либо таскать с собой golang (гуглить: portable golang) если же нужно еще и оффлайн, то заранее подгрузи нужные зависимости
    запуск приложения из electron:
    var child = require('child_process').execFile;
    var executablePath = "myapp.exe";
    var parameters = ["--my_param"];
    
    child(executablePath, parameters, function(err, data) {
         console.log(err)
         console.log(data.toString());
    });
    Ответ написан
    Комментировать
  • Как лучше реализовать транзакцию?

    @rPman
    insert into table (x,y,z) values (?,?,?), (?,?,?), (?,?,?), ...


    а значения передавай как обычно сразу все, массивом, в правильном порядке
    Ответ написан
    Комментировать
  • Как наиболее правильно разработать сервер чата с комнатами на WebSocket?

    @rPman
    Что значит
    Не лезть же каждый раз в БД, чтобы выдать пользователю информацию о других пользователях в его комнате
    ?

    У тебя websocket, что подразумевает что на клиент передается оперативная информация (изменения) а не полное состояние по таймеру, значит клиент самостоятельно хранит в себе необходимую информацию в коде на javascript в массивах или localstorage, если это так критично
    Ответ написан
  • Как стримить с помощью WebRTC очередь JPG-ов и есть ли в этом смысл?

    @rPman
    Если говорить про rtc то используй mjpeg, кадры состоят из jpeg, проигрывается везде, наверное реализовать на слабом процессоре не сложно,так как фактически нужно сформировать правильный заголовок и правильно компоновать готовые jpeg.

    цель не ясна, исходить нужно из конечной цели а не особенностей ее реализации
    Ответ написан
    1 комментарий
  • Создание многопользовательского сервера на го?

    @rPman
    Вне зависимости от выбора языка необходимо решить важные проблемы и выбрать решение, на практике есть два подхода к созданию игры:
    1. игровой цикл запускается на клиентах, сервер выступает как управляющий, синхронизирует и валидирует данные от клиентов. Куча проблем из-за рассинхронизации (колбасящий туда сюда персонаж) но зато 'приятный' реалтайм (это иллюзия, лаги просто маскируются)
    2. игровой цикл запускается на сервере, клиенты подключаются и запрашивают как мир выглядит в текущий момент. Это лагучий вариант (не подходит к динамичным играм) но никаких проблем синхронизации

    В любом случае для реалтайм игр нужны сокеты (сервер должен как то сообщать клиентам об изменениях). Первый способ реализации может позволить использовать webrtc, что значительно может уменьшить лаги но усложнит алгоритмы валидации от читеров.

    Есть идеологический способ объединить оба подхода, сделав второй главенствующим, а первый подход будет отвечать за отображение информации, клиент сам будет сравнивать миры которые генерирует каждый подход в реальном времени и при расхождении делать коррекцию.

    На практике многие разработчики плюют на валидацию, пишут как получится (к примеру берут синглпеерный движок который ничего не проверяет типа старый unreal engine, пилят на его основе AAA MMRPG а потом получают читеров, которые кастуют любые скилы любым классом или летают или проходят сквозь стены и т.п.)
    Ответ написан
    Комментировать
  • GO: Как скомпилировать Go DLL библиотеку для работы с ней в VBA?

    @rPman
    Задайте вопрос лучше как с переменными работать, форматы строк или тех же списков то разные.

    Если что, VBS может использовать только COM объекты. Я ради любопытства погуглил, и не нашел как из GO создать таковые, есть примеры только использования.

    Мой вам совет, само по себе использование таких разных инструментов - нечто из ряда вон выходящее, не должно быть нормой и этого нужно избегать как можно сильнее. Не в том плане что COM это плохо, он как раз и создавался как инструмент под вашу задачу, а в том что вы станете сильно ограничены в плане использования инструментов, а именно windows, т.е. да COM это плохо.

    Межпроцессорное взаимодействие устройте через сериализацию и сокеты. Недостатки - накладные расходы на сериализацию (используйте гугл protoboof его нет наверное только для чего то типа брейнфак, и то я не уверен, и он быстрее на порядок чем привычный json/xml/...), достоинства - независимость и разделение задач, в будущем вы сможете переделать каждый модуль на любом другом языке/платформе, а еще разделение процессов по машинам немного поможет горизонтально масштабировать систему.
    Ответ написан
    Комментировать
  • Когда язык может стать узким местом?

    @rPman
    Язык почти никогда не создает проблем со скоростью, но их создают инструменты и библиотеки, которые используют разработчики, чтобы облегчить себе жизнь.

    И на php (phpreact) можно написать приложение, обрабатывающее 10к запросов в секунду на одном процессоре, а можно на nodejs (javascript) написать асинхронное приложение, которое штатным распаковщиком gzip будет тратить 99% времени на распаковку gzip а потом оставшуюся половину на копирование массива с данными (из-за чего скорость на порядок ниже php получается, реальный пример простой обработки БОЛЬШОГО количества упакованных текстовых дампов)

    Если же у вас проблемы создает обработка данных, пишите критичные вещи на c++ и подключайте модулем.
    Ответ написан
    Комментировать
  • Можно ли организовать загрузку html без перезагрузки страницы, используя WebSocket?

    @rPman
    Не просто можно а нужно.

    Два классических подхода
    - генерация содержимого страницы, т.е. формируется html и помещается в элемент на странице, заменяя предыдущий
    - страница сразу представляет из себя все шаблоны (недоделанные страницы), размещенные в скрытых элементах, затем по нажатию кнопки этот шаблон дополняется информацией и делается видимым.

    Очень часто второй способ более оправдан, его удобнее отлаживать, но скорее всего итоговый результат будет комбинацией этих подходов, когда основная структура страницы определяется самой html, но внутренние элементы доформировываются скриптом.

    Нормальным подходом является хранение шаблонов тут же на странице в <script id='myTemplate' type='html/text'>....</script>, в итоге все необходимые шаблоны будут загружены при первой же загрузки страницы, и закешированы, а в дальнейшем с сервера запрашиваются только данные (по вебсокет или ajax), удобно, логично, быстро и главное разработка логично разделяет интерфейсом занимается браузер, данными - сервер.
    Ответ написан
    2 комментария