Задать вопрос
  • Структура проекта на Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Добрый день.

    Это попытка стандартизировать структуру проекта (многие ориентируются на неё)
    https://github.com/golang-standards/project-layout

    Go-Kit - очень грамотная структура, очень
    https://github.com/go-kit/kit

    И обязательно стоит посмотреть
    https://12factor.net/ru/

    Что касается "Т.е. в одном файле может быть сразу модель, сервис и репозиторий. Есть ли какие-то бестпркатики по этому вопросу?" - то это не совсем так, в одном пакете (папке) может быть и модель, и сервис, и репозиторий". Например вот так:
    yourpackage/service.go
    yourpackage/repo.go
    yourpackage/model.go
    И это всё будет доступно в рамках пакета.

    Лично я использую такую схему:
    cmd/ - команды исполняемого файла
    conf/ - конфиги приложения (env файлы)
    init/ - конфиги logrotated, nginx, systemd и т.д.
    pkg/ - публичные пакеты
    pkg/packagename/ - тут определяются интерфейсы (сервиса, репозитория и т.д.) в разных файлах
    pkg/packagename/endpoints/http - endpoint'ы для HTTP
    pkg/packagename/repo/mysql - реализация репозитория на MySQL
    pkg/packagename/repo/gorm - реализация репозитория на GORM (для примера)
    pkg/packagename/service/ реализация сервиса

    Я написал очень кратко, если что-то не понятно или есть вопросы - пишите, я опишу подробнее
    Ответ написан
    3 комментария
  • Есть ли разница между горутинами и await в C#?

    Tyranron
    @Tyranron
    Несмотря на то, что эти инструменты созданы для решения одних и тех же проблем, делают они это по-разному, как под капотом, так и в плане предлагаемых абстракций. Потому нельзя сказать что async/await в C# - это "просто обертка над горутинами".

    Горутины в Go - это концепция stackful coroutines (под капотом) + CSP (в абстракциях). Каждый раз, когда мы создаём горутину, под неё выделяется отдельный стек вызовов для её собственных нужд. При этом, когда происходит паника, то stack unwinding (размотка стека вызовов) происходит только в пределах этой горутины и не покидает границ её стека. Стек горутины полностью отвязан от стека её создания/вызова, потому горутина не может возвращать результат. Любое общение между горутинами выполняется либо посредством каналов, либо какой-то общей памяти.

    async/await в C# (то есть, Task'и) - это концепция stackless coroutines (под капотом) + futures (в абстракциях). Код с async/await'ами компилятор превращает в определенную стэйт-машину с yield point'ами. У них нет отдельного стека, они выполняются в том же стеке что и вызывающий их код. Соотвественно, есть возможность словить exception'ы (аналог panic'и) возникающие внутри асинхронного Task'а прямо в запускающем его коде. Так как выполнение идёт на том же стеке - Task нормально может возвращать результат и мы его можем считать в вызывающем коде без дополнительных примитивов/инструментов.

    При этом, если мы запустим Go с GOMAXPROCS=1, то мы получим однопоточный асинхронный код в Go (по умолчанию он многопоточный). Также и в C# мы можем выполнять Task'и как на одном потоке, так и на thread pool, получая аналогичные Go гарантии рантайма.

    С точки зрения абстракций/использования - это уже вкусовщина. Кому как больше нравится. У futures лучше дизайн в плане composability (их эргономичнее join'ить и select'ить), но они вынуждают писать везде async и await. У горутин надо постоянно городить чехарду с синхронизацией (попробуйте сделать аналог await для произвольной горутины), но если эту чехарду прятать под капот (как обычно и делают), то код вообще выглядит полностью синхронным и программисты радуются.
    Ответ написан
    4 комментария
  • Как отфильтровать массив по типу данных?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Проверяем, что возвращает оператор typeof:

    const strings = arr.filter(n => typeof n === 'string');
    const numbers = arr.filter(n => typeof n === 'number');
    const booleans = arr.filter(n => typeof n === 'boolean');

    Или, проверяем, что элемент и результат его преобразования в значение интересующего нас типа совпадают:

    const strings = arr.filter(n => n === `${n}`);
    const numbers = arr.filter(n => n === +n); // в отличие от typeof, отбрасывает NaN
    const booleans = arr.filter(n => n === !!n);

    Или, группируем массив по имени типа, а дальше извлекаем чего надо:

    const groupedByType = arr.reduce((acc, n) => {
      const type = n == null ? `${n}` : n.constructor.name.toLowerCase();
      (acc[type] = acc[type] || []).push(n);
      return acc;
    }, {});
    
    const strings = groupedByType.string;
    Ответ написан
    Комментировать
  • Почему указатель не меняет другой указатель в golang?

    currentNode — это переменная, существующая только в этой функции. Это указатель, вы присваиваете ему какое-то значение, а потом присваиваете ему nil. От этого ранее присвоенный объект не изменится, ибо вы меняете только указатель на этот объект.
    Ответ написан
    Комментировать
  • Как запускать приложение?

    shpaker
    @shpaker
    Вольный хлебопашец
    subprocess в помощь
    import subprocess
     
    args = ["ping.exe", "www.yahoo.com"]
    process = subprocess.Popen(args, stdout=subprocess.PIPE)
    data = process.communicate()
    print(data)

    Ссылка на доку https://docs.python.org/3/library/subprocess.html
    Ответ написан
  • Странный дизайн Rust?

    Rust это не C++. Почему он должен брать термины из C++?

    В Java вон тоже ссылки - это указатели в терминологии C++.

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

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Набор букв какой-то, и каша в голове, походу.

    На счет редактора, скажу так.
    Хоть на печатной машинке делай, если оно сделано красиво (читай, правильно, по стандартам).
    Крутость программиста никак не зависит от используемых инструментов.
    Это только удобство, упрощение работы.
    Ответ написан
    2 комментария
  • Какие статьи, книги прочитать по многофайловым проектам?

    @deliro
    MVC
    Макконнелл
    Fluent Python
    Ответ написан
    Комментировать
  • Можно ли в NODE.JS наблюдать пользовательский цикл событий?

    alex_keysi
    @alex_keysi
    Помог с решением? Отметь “правильный ответ”
    Может подписаться на них? И когда кто то эмитнул событие, то записать в массив что произошло событие. Когда кол бэк на событие выполнится, то удалить его из этого масива.
    Или у ноды может есть апи для считывания эвент лупа. Но там могут лежать и сторонние кол беки. От других библиотек. Всякие fs модули
    Может это тебе подойдет
    https://stackoverflow.com/questions/30757182/how-t...
    Там апи с libuv. Для считывание из евент лупа
    Ответ написан
    Комментировать
  • Нужна бесплатная субд для локального приложения. Какую использовать?

    2ord
    @2ord
    Реляционные СУБД:
    • SQLite
    • MySQL
    • Firebird
    • PostgreSQL
    • SQL Express Edition (есть ограничения)


    Есть нереляционные. Вот тут есть небольшой список: nosql-database.org
    Ответ написан
    Комментировать
  • Есть ли расширение, которое в списке вопросов на Тостере показывает рядом с вопросом автора и его статистику?

    @Koteezy
    Если кому то интересно

    Данные сохраняются в localStorage на один день, так что, при каждом переходе он запрашивать инфу не будет
    Ответ написан
    6 комментариев
  • Переменная GOPATH все время слетает, почему?

    nikonor
    @nikonor
    Программист go, perl
    Переходите на модули:-) И тогда GOPATH перестанет быть нужен.
    Ответ написан
    3 комментария
  • Что лучше использовать для анимаций css или js? И почему?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    но которую можно реализовать и с помощью css, и с помощью javascript...
    ваше мнение хотел услышать

    Мне самому нравится делать все на CSS, но... Если анимация должна быть интерактивной и нужно ее останавливать в процессе, откатывать в изначальное положение и.т.д., или некоторые ее части зависят от данных (в широком смысле - это и движение по сложной траектории, и построение графиков и.т.д.) и их проще рассчитать скриптом, чем подбирать коэффициенты в CSS keyframes, то JS будет лучшим выбором. Если это последовательность мало связанных между собой изменений, то опять же скрипты почти всегда будет проще реализовать. Если речь идет о CSS-анимациях с фильтрами (особенно SVG-фильтрами), то можно влететь в очень сильные проблемы с производительностью на слабом железе. И никакие хаки с GPU тут не помогут - все равно будет тормозить. В такой ситуации может иметь смысл не просто писать на JS, но и подключить WebGL и все делать руками на шейдерах.

    В остальных случаях стоит смотреть по ситуации - разные :hover / :focus эффекты обычно легко реализуются на CSS, и, если это так, то зачем что-то придумывать? CSS в последнее время очень даже неплох. Но если, например, в проекте вся анимация делается на JS, то может иметь смысл продолжать делать так же, сохраняя единообразие в коде.
    Ответ написан
    Комментировать
  • Есть ли книги или курсы о безопасности веб сайтов на php?

    DevMan
    @DevMan
    нет смысла искать инфу конкретно для пыха.
    векторы/направления атак в вебе едины и не зависят от целевой платформы (не считая уязвимостей в самих трансляторах). поэтому надо изучать тему безопасности веб-приложений вообще.
    Ответ написан
    2 комментария
  • Хочу стать реверс-инженером. Что изучать для этого?

    Adamos
    @Adamos
    "Хочу стать мастером спорта. Посоветуйте, что почитать".
    Ответ написан
    15 комментариев
  • Какие есть мультипротокольные Download-менеджеры?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    uGet ugetdm.com есть под винду. Поддерживает обычное скачивание и BitTorrent
    Имеет для хрома https://slgobinath.github.io/uget-chrome-wrapper/
    Ответ написан
    Комментировать