• Какую литературу можно найти по golang?

    @programrails
    Я бы рекомендовал изучение в такой последовательности:

    Beginner level (синтаксис языка):

    1. Начать с golang-book.ru . Это на русском и довольно неплохо для начинающего.

    2. https://golang.org/doc/effective_go.html - это уже на английском, но всё равно толково и хорошо заходит после 1-го пункта. Кратко, по делу, без воды, достаточно понятно.

    После прочтения этих 2 пунктов у Вас уже будут базовые понятия о языке.

    Intermediate level (concurrency - многопоточность):

    Как ни пытался, не смог определить какую-то конкретную универсальную книгу. На этом уровне много плохих книг, сложно выделить что-то хорошее. Относительно неплохими для этого уровня (пока что) показались:

    (продолжаем последовательность изучения Go по пунктам):

    3. Базовый веб сервер на Go Статья, без которой дальнейшее трудно заходит (книгоавторам всем дружно лень такое нормально объяснить).

    4. M. Curtis - Level Up Your Web Apps With Go
    Читал - и не понимал - что происходит? Чувак явно пишет рельсы на Go! Всё такое до боли знакомое... Что такое? А потом смотрю в профиле https://www.linkedin.com/in/mal-curtis/ - так он же пишет на работе на Ruby on Rails! Так что книжка отлично зайдёт рельсовикам, осваивающим Go. Книга неплохая, автор явно старался. Автор, ты хороший человек.

    5. K. Cox-Buday - Concurrency in Go. Tools and Techniques for Developers. Книга не очень удачная, но пока я не успел найти что-то получше. Автор - женщина, и глупая. Книга читается мучительно и крайне медленно. Охват материала неплох - но объяснения косноязычные, с водопадом лишних слов и эмоций, примеры кода неоправданно переусложнены, ряд тем вообще остались бы непонятыми, если бы не гугление. Читаю и матерюсь на каждом шагу.
    PS Последние 2 главы пошёл уже такой горячечный бред, что я просто не смог заставить себя читать этот ужас. Бросил. В общем, далее параграфа Queuing читать не стоит. Книга прекрасно иллюстрирует тезис, что, какими бы умными ни были женщины, они всё равно дуры, и нечего им в программировании делать (кроме разве что 1С).
    К сожалению, книгу прочесть всё-таки надо, ибо охват хорош - а заменить книгу особо нечем (в смысле другой книгой, продаваемой за деньги - разве что статьями).

    Есть ещё книга N. Kozyra - Mastering Concurrency in Go - но у неё ужасные отзывы - да и я пытался читать другую книгу по Go у этого же автора - и мне также крайне не понравилось.
    Смешно сказать - но по Go нет ни одной путёвой книги про Concurrency (единственное, ради чего Go был создан)!

    6. Лучшее объяснение Go Context, что я пока видел. Оно даже лучше официального (написанного индусом, и оттого плохого).

    7. M. Tsoukalos - Mastering Go - но только Chapter 10: Concurrency in Go – Advanced Topics - и исключая параграф Worker pools (он ошибочный - там ничто не сдерживает размножение горутин - какой же тогда это пул).
    Средне-удовлетворительная глава, звёзд с небес не хватает, интереснее всего был параграф Sharing memory using goroutines - частный пример Катькиного Confinement'а.

    Advanced level (микросервисы на Go):

    Я пытался читать N. Jackson - Building Microservices with Go - это оказалось невозможным, книгу написал какой-то сумасшедший безумец, находящийся в состоянии наркотического опьянения. Отзывы на Амазоне это подтверждают.

    Также я попытался читать M. Ryer - Go Programming Blueprints (2 ed) - только главу Chapter 10: Micro-services in Go with the Go kit Framework - не понравилось. Примеры кода сложноваты (автор пытается построить реальную систему - ну и дурак - вместо того, чтобы ограничиться демо-примером), объяснения сопутствующего материала никакие (по сути, их нет). Бесполезная глава. Несколько тем свалены вместе - но ни одна толком не объяснена. Очень слабенький автор.

    Вердикт: нормальной книжки по теме "Go микросервисы" пока не обнаружено. Придётся изучать эту тематику из статей и инструкций по использованию микросервисных Go-фрэймворков - вот списочек фрэймворков:


    Я начал с gRPC. Сначала прочёл официальную доку по protobuf (включая раздел о Go). Дока оказалась достаточно вменяемой. Но зато официальная дока по gRPC уже оказалась совершенно паршивой. Там 2 примера - попроще и посложней. Писали доку явно последователи тех, кто писал доку к первому ангуляру (т.е. те, кому я бы отрубил обе руки по самые плечи). Понять что-либо без исходников (к статье) - нереально. Но - исходники ещё надо найти, ибо в статье ссылки на них ... нет. Оказалось, исходники тут: https://github.com/grpc/grpc-go/tree/master/exampl... . Но даже с ними - всё довольно непросто понять - даже в простейшем примере. Потому что авторы умолчали о многих важных моментах. Т.к. им в падлу шевельнуть задницей лишний раз. В общем, есть нужда в нормальном авторе, кто опишет, что такое gRPC. Попробуйте почитать статью от Шизы - это слегка окультуренный сокращённый пересказ сложного случая.

    Рассмотрим Go Micro. Продукция очередного кретина (да ещё и спорного качества). Что, скажите, можно понять из таких "объяснений"? Кстати, ищите в Яндексе термин "Service Discovery" - здесь нужно понимать, что это. Посмотрите и Consul. Вот ещё разумная статья о Go-микросервисах. И ещё я понял - без предварительного изучения protobuf и gRPC понять Go Micro будет затруднительно (если вообще возможно). Желаю вам никогда не встретить на работе продукцию этого дегенерата. Go Micro показался мне китайским фонариком со встроенными компасом, радиоприёмником, часами, зарядкой, отвёрткой, точилкой для карандашей, ногтерезкой, и т.д.

    Идём дальше. Go kit производит намного более лучшее впечатление. Правда, документация не полная - автору не хватило терпения её закончить. Но всё же разобраться можно - есть исходники-примеры, снабжённые подробными комментариями. Автор мне понравился.

    Почитайте полезную статью-сравнение.

    Приложение:

    Гоняться за русскоязычными книгами по Golang не рекомендую. Я прочёл на русском:
    - А. Донован, Б. Керниган - Язык программирования Go
    Это совершенно отвратительная бездарная книга.
    и просмотрел оглавление русскоязычной книги:
    - М. Саммерфильд - Программирование на языке Go
    Хотя я её не читал, но беглый просмотр её оглавления создаёт самое негативное впечатление о книге. Такое ощущение, что это целенаправленная диверсия против изучающего golang, с целью развести его на время (прочтения) и деньги (при покупке). Марк Саммерфилд - это профессиональный графоман, посмотрите сами на его карьерный путь: https://www.linkedin.com/in/qtrac/

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

    М. Батчер, М. Фарина - Go на практике - на русском языке - эта книга вроде бы достаточно неплохая, но она для опытного разработчика - и она не излагает системно - а отрывисто.

    Пытаться читать спецификацию языка также не рекомендую - ничего не поймёте:
    https://golang.org/ref/spec

    Заключение

    Нормальной литературы по Go практически нет (кроме азов). Все микросервисные Go-фрэймворки плохо документированы, вынуждая разбираться в них по примерам с исходниками (!).

    Англоязычных книг по Golang в электронном виде бесплатно - много, более 30 (а то и под 50). Многие написаны индусами, или оторванными от жизни вузовскими преподами, или какими-то левыми любителями Go (у таких "книг" даже нет ISBN). Есть даже книги, написанные неграми! Все такие книги требуют осторожного выбора. Почему именно Go вызвал у окружающих непреодолимые позывы к графоманству? Такое впечатление, что многие авантюристы решили "срубить баблишка" на "хайповой" теме. Действительно, найти хотя бы нормальную книгу (не говоря уже о хорошей) - оказывается по факту крайне непросто - почему-то именно к Go примазались многочисленные негодяи и бездари - как ни в каком ином языке программирования.

    Всё, о чём я рассказал в этом посте, доступно бесплатно онлайн в электронном виде (Либген, к примеру).

    В общем-то, основное внимание при изучении Go следует уделить его возможностям по многопоточности (concurrency), которые включают низкоуровневые механизмы (как в C++) типа мьютекса и высокоуровневые механизмы типа каналов. Собственно, это как раз то самое, зачем Go вообще понадобился. Вторая по значимости тема в Go, как мне кажется, это микросервисы.
    Ответ написан
    Комментировать
  • Как правильно перезагрузить страницу, если пользователь удален?

    @sl0
    В симфони данные юзера записываются в сессию и при любом изменении данных валидируются. Соответственно при удалении пользователя самим собой теряется валидатор и вываливается эта ошибка. Самый простой способ будет принять в public function delete
    еще и SessionInterface $session, а потом очистить сессию:
    $this->get('security.token_storage')->setToken(null);
    $session->invalidate();
    Ответ написан
    1 комментарий
  • Портфолио backend?

    DevMan
    @DevMan
    да ничего не делать.
    портфолио - это то, что можно увидеть/потрогать руками. а бекэнд - то, что никто не видит, но все его пользуют.

    максимум - код на каком-то гитхабе. который мало кому упёрся.
    всё портфолио бэкендера - способность красиво рассказать что умеет и доказать это.
    Ответ написан
    1 комментарий
  • Redis в Docker container (открытый для доступа из Интернета) неожиданно начинает писать в var/spool/cron как решить эту проблему?

    @ArtiomK Автор вопроса
    Как правильно ответил человек, являющийся автором коннектера на C++ для Redis, у Redis есть еще один пользователь, существование которого никак не отображается в файле конфигурации - default пользователь.
    У этого пользователя по умолчанию нет вообще никакого пароля, под этим пользователем и заходили при взломе.

    Существование этого пользователя и объясняет почему я получал ошибку при попытке сделать защищенный мод включенным.

    В итоге я выключил пользователя default, альтернативный вариант сделать ему пароль и включил защищенный мод.

    Итого:

    Dockerfile:

    FROM redis:6.0-alpine
    
    WORKDIR /usr/src/app
    
    RUN apk add --no-cache tzdata
    
    ENV TZ=Europe/Moscow
    
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    COPY redis.conf /usr/local/etc/redis/redis.conf
    
    CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]


    В файле конфигурации Redis:

    protected-mode yes
    
    user default off
    
    user someusername allcommands allkeys on >somelongpassword # можно также отключить часть команд
    Ответ написан
    Комментировать
  • Есть ли такая книжка типо "словаря" по с#, т.е просто в столбик расписаны все "слова" с пояснением?

    Griboks
    @Griboks Куратор тега C#
    Называется официальная документация. Причём, такая книжка есть не только по шарпу, но и по юнити.
    Ответ написан
    Комментировать
  • Как подбирать музыку под текст?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Даже вопрос некорректно сформулирован, чтобы как-то можно было бы что-то посоветовать.
    А именно:
    1. Что такое настроение и в чём оно измеряется?
    2. Что значит стиль текста в вашем понимании?
    3. Текст - уже существует или нужно сочинять его через НС?
    4. Музыка - уже существует или нужно сочинять её через НС?
    5. Что хотите увидеть на выходе? (3 примера).
    Ответ написан
    1 комментарий
  • Что должен знать junior golang backend разработчик/разработчик на golang?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Кроме Golang еще нужно знать сам backend))
    Ответ написан
    Комментировать
  • В чем разница между docker build и docker image build?

    @q2digger
    никого не трогаю, починяю примус
    Это для поддержки старых клиентов и людей привыкших к тем командам (как я например).
    Для примера старая команда docker ps это алиас к docker container ls а команда docker build это алиас к docker image build
    Ответ написан
    3 комментария
  • Включил компьютер и удивился, линукс живет своей жизнью?

    @BorisKorobkov
    Web developer
    Вероятно, мышкой в проводнике случайно перетащили папки в подпапку. Переместите обратно.
    Ответ написан
  • Что значит зелёная заливка имени файла в листинге?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Означает Sticky Bit на каталоге /tmp. Обратите внимание на последнюю букву в правах доступа.
    Ответ написан
    Комментировать
  • Почему слишком большой размер данных после добавления данных в базу?

    Melkij
    @Melkij
    PostgreSQL DBA
    Удаляю значит старые записи в таблицах и php парсю xml файлы и вставляю в таблицы соответствующие.

    Ну и совершенно закономерно получаете двукратный рост как самой таблицы, так и всех индексов. Всё верно.
    Почему? Потому что MVCC. Удаление не удаляет данные, т.к. их может кто-то хотеть ещё прочитать из более старых транзакций, а только отмечает xmax - id транзакции, с которой записи перестают быть видимы. Место занимаемое удалёнными строками будет возможно затем переиспользовать под новые данные после прохода vacuum вручную или автовакуумом.

    Индексы, разумеется, тоже занимают место. И по той же самой причине индексы в варианте delete всей таблицы + insert будут занимать вдвое больше места.

    Когда вы хотите удалить всё из таблицы - вам нужен не delete, а truncate.
    Ответ написан
    1 комментарий
  • Как десериализовать массив json-ов c отношением OneToMany?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    Symfony serializer как десериализовать массив с объектами?

    Плюс, вам надо прописать типы в phpDoc
    /**
     * @var \App\Entity\IpContract[]
     *
     * @ORM\OneToMany(targetEntity="App\Entity\IpContract", mappedBy="users", orphanRemoval=true)
     */
    private $ipContracts;
    Ответ написан
  • Принято ли в Laravel для каждой модели создавать контроллер?

    @s_k_e_j
    Контроллер является связующим звеном между действиями пользователя и логикой приложении, поэтому необходимо в первую очередь ориентироваться на те действия, которые совершает пользователь. Если речь идет об обработки фото редактирование то должен быть PhotoController с методом edit() и т.п. Если речь идет о изменении имени пользователя, то это событие должен обработать UserController.
    Создавать для того, что бы было контроллер конечно не надо.
    Ответ написан
    Комментировать
  • Где хранить id сессии php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос какой-то странный.
    Идентификатор сессии не нужно хранить.
    Единственная его функция - это предаваться на сервер с каждым запросом.
    Содержимое localStorage само по себе на сервер не передаётся. То есть смысла класть туда ид сессии я не вижу.

    Кроме кук нормальных вариантов все равно нету.
    Если пользователь хочет отключить куки - это значит что он хочет отключить и сессии.
    Имеет полное право.
    Ответ написан
    Комментировать
  • Как запустить планировщик задач ларавел?

    Sanes
    @Sanes
    В планировщике Cron должно быть задание
    * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

    Где снежинки означают повторять каждую минуту.
    Ответ написан
    Комментировать
  • Можно ли сортировать выборку из 2-х таблиц в Laravel?

    DevMan
    @DevMan
    переписываете запрос на билдере -> получаете коллекцию -> колбасите как нужно.

    или сырой запрос и обработка. но это уже, хоть и возможно, но не laravel-way.
    Ответ написан
    Комментировать
  • Как сделать тумблер который передаёт пхп скрипту его значение при изменении его(тумблера) состояния?

    iamd503
    @iamd503
    Верстальщик
    Если вы очень много думали и ничего не придумали, то настала пора Вам выучить php и ajax.
    Ну или если совсем лень это делать загуглить php+ajax
    Ответ написан
    Комментировать
  • PHP getter setter виде функции и с привязкой параметра объекта?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    БД есть очень много разные данные для каждой сделать не возможно!
    не верно ты дядь федор этот бутерброд жрешь - надо не магией баловаться, а написать "scaffold" - генератор классов-моделей на основе данных таблиц. смотри gii в Yii2
    Ответ написан
    Комментировать
  • Как поменять поле, которое проверяется в условии ларавель?

    @jazzus
    \DB::table('users')
       ->where('active', true)
       ->whereDate('updated_at', '<=', now()->subMonths(3))
       ->update(['active' => false]);
    Ответ написан
    2 комментария
  • Как правильно в доктрине построить запрос для фильтра со сложными условиями?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Вы в цикле для разных фильтров добавляет в один объект QueryBuilder параметры с одним ключом values, потом при сборке запроса Doctrine достает первый найденный Parameter с ключом values (а их таких несколько, но ей достаточно первого).

    Код Доктрины:
    5f21da43a9cea902909869.png

    То есть для цвета, года, уровня — всегда достается первый параметр с ключом values

    Предлагаю подставлять вместо этого слова разный алиас, например key:
    [$normalizedKey, $key] = $this->getKeys($qb);
    
    $qb
    	->andWhere(sprintf('%s IN (:%s)', $normalizedKey, $key))
    	->setParameter($key, $this->getValue());
    Ответ написан
    1 комментарий