Ответы пользователя по тегу Go
  • Зачем в языке Go приняты отступы в 8 символов?

    @Gizmothron
    Если бы там было 2 пробела или 7 пробелов - вы задали бы точно такой же вопрос.

    Автор утилиты go fmt, которая и делает это "стандартное" форматирование сам не доволен используемым форматом. Он лично предпочитает другой.
    Но автор go fmt согласился со своими сотоварищами авторами Go, что формат должен быть единым во всём мире.

    Какой приняли, такой приняли.

    UPD:
    go fmt вставляет не пробелы а табы.
    таким образом, отображение зависит только от твоего текстового редактора, а не от "вредного" Go.
    Ответ написан
    2 комментария
  • Стоит ли изучать GoLang вместе с изучением алгоритмов?

    @Gizmothron
    Go не является языком совершенно другой парадигмы.
    PHP является императивным.
    Go является императивным.

    Другая парадигма - это Erlang, Haskell, Nemerle.
    Ответ написан
    Комментировать
  • Как работает блокировка?

    @Gizmothron
    То что вы используете sync ничего не говорит - будьте конкретнее, в sync много функций/объектов.

    Очередность, возможно, что совпадет, но совсем не гарантируется, если вы ее сами не организуете в явном виде.

    Да, все блокированы и ждут, пока одна читает/пишет, если вы используете sync.Mutex.

    Вообще при чтении блокировать не нужно. Используйте специальный sync.RWMutex.

    Блокировать нужно на очень малое количество операций.

    Если операций много/сложные, то используйте не sync, а каналы.

    Еще можете прочитать использовать lock-free алгоритмы, для этого вам понадобится пакет atomic.
    Ответ написан
  • Как удалить первый елемент из map?

    @Gizmothron
    delete
    не нужно никаких итераций, это же не массив.
    Ответ написан
  • Каким багажом знаний должен обладать go программист, чтобы суметь найти работу?

    @Gizmothron
    Вы слишком серьезно относитесь к языку. Язык программирования - это не человеческий язык. Он изучается быстро. Для программиста знание очередного языка программирования - это ерунда. Это такая же элементарная база как владение слепым десятипальцевым методом набора на клавиатуре или умение делать git add, git commit, git push, git pull.

    Для Go:
    Технологии Google AppEngine хорошо описаны, есть примеры (endpoint, очереди)
    git (базовые вещи)
    хотя бы в общих чертах знать что такое вендоринг, а лучше уметь glide/godeps/gb
    Gorilla Toolkit (mux, websocket, schema)
    RESTful/RPC
    gometalinter, golint
    Умение пользоваться специализированным редактором или IDE, настроенными под Go. И умение его настроить под себя.
    знакомство с Martini, Revel или т.п.
    знакомство с gizmo, go-micro

    А вообще - см. тут список в разделе "Related projects"
    https://github.com/go-kit/kit
    Ответ написан
    Комментировать
  • Как компилировать под другую ос?

    @Gizmothron
    Использовать для компиляции https://github.com/mitchellh/gox
    или посмотреть как они там внутри это сделали.
    Ответ написан
    Комментировать
  • Стоит ли так делать?

    @Gizmothron
    Читай на Хабре серию статей про Tarantool.
    Это json-подобное хранилище данных в оперативной памяти.
    С индексами.
    И с гарантией записи на диск.

    Автор Тарантула рассказывает об том, как они этого добились.
    Там несколько файлов используется. Т.н. Лог или Журнал.

    Подобные же вещи используются в серьезных СУБД Oracle, MS-SQL, PostgreSQL
    Ответ написан
    Комментировать
  • Потокобезопасность. Можно обьект блокировки делать глобальным?

    @Gizmothron
    Если это разные мьютексы, то они - разные блокировки дают.
    Или сводить все к вызову одной общей функции (внутри которой и происходит блокировка).
    Или, если код обрабатывающий заблокированные объекты, является сложным - использовать каналы.
    Или, использовать lock-free алгоритмы с помощью package atomic. Прочитать про это можно в серии статей https://habrahabr.ru/post/196834
    Ответ написан
    Комментировать
  • Как реализовать пулл?

    @Gizmothron
    Рандомно дергать - лишнее. Если речь идет о коннектах к БД - то они идентичные.
    И нужно не забывать возвращать в пул - тут может быть засада.
    Ответ написан
    Комментировать
  • Как создать связь между приложениями на golang в реальном времени?

    @Gizmothron
    websocket - это только если нужна совместимость в https.

    Если по сети:

    gRPC если нужна защита.
    Или просто Google Protobuf - это очень быстро.
    msgpack - это типа protobuf, но без необходимости описывать протокол, это как бы бинарный json.

    Есть еще gotalk

    Если все на одном физическом компьютере - то unix sockets.

    Только термин "реальное время" означает совсем иное.
    websocket априори не может быть в "реальном времени", так как это сетевой протокол.
    Ответ написан
    Комментировать
  • Что скажете об архитектуре?

    @Gizmothron
    Вроде заумно сделано. Серьезно поработал.
    Но нет явного горизонтального масштабированияю

    UPD:
    В комментариях обсудили всякие технические вопросы.

    А вот по организации логики в мультиплеере
    https://habrahabr.ru/post/302394/
    Ответ написан