Пишем полезного Telegram бота на Golang | Урок #4 - EventProcessor, Storage

Sdílet
Vložit
  • čas přidán 7. 06. 2024
  • В этом уроке мы разберемся с API для взаимодействия с telegram-ботом и напишем модуль clients/telegram, который будет выполнять функции клиента для этого API.
    Ссылка на итоговый проект на гитхабе: github.com/JustSkiv/read-advi...
    На коммиты по урокам не разбито, так как изначально собирался записать один большой урок.
    Картинка на превью добавлена с разрешения её автора, за что ему большое спасибо.
    Его профиль на Хабре: habr.com/ru/users/oWart/
    Тайм-коды:
    00:00 Вступление
    00:15 Начинаем писать Fetcher и Processor
    04:47 Почему отложили EventProcessor
    04:57 Создаем Storage
    07:02 Реализация интерфейса Storage: files
    07:27 Метод files/storage.Save()
    09:48 Метод page.Hash(): создание хэша страницы
    12:06 Функция files/fileName()
    12:45 Доделываем метод files/storage.Save()
    15:04 Метод files/storage.PickRandom()
    18:14 Метод files/storage.Remove()
    19:01 Метод files/storage.IsExists()
    20:22 Заключение

Komentáře • 41

  • @Irina-bn4my
    @Irina-bn4my Před rokem +3

    Спасибо за такие уроки) очень полезно видеть такие примеры хорошего кода)

  • @user-rd4ph1oh3x
    @user-rd4ph1oh3x Před rokem

    Спасибо за урок, пробовал сам методы для начала делать, а потом смотреть как ты это делаешь)
    Очень хороший опыт, кстати)

  • @seldomhappy
    @seldomhappy Před 2 lety +7

    Был очень удивлен, что есть такой контент в открытом доступе. По поводу пользовательских типов, с удовольствием бы посмотрел видео

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +1

      В открытом доступе есть много хорошего контента =)

    • @shokhrukhdavlatmamadov1619
      @shokhrukhdavlatmamadov1619 Před rokem

      @@nikolay_tuzov здравстуйте! Спасибо Вам за ваши видеоролики! Хотел спросить, видео по пользовательским типам вышло-таки, или нет?

  • @Randych
    @Randych Před 2 měsíci +2

    Что классно в бобре - ты можешь открыть видео пятилетней давности и с большим шансом там будет актуальный контент.

  • @user-pt4iz2py6k
    @user-pt4iz2py6k Před 2 lety +4

    Очень рад, что мощному и хвалёному процессору - эдакому мачо-вышибале от мира данного проекта, пришлось подвинуться в сторону и отдать львинную долю ролика формированию Стоража (вперёд Стораж!)
    Как говорится: НИКТО НЕ СДВИНЕТСЯ С МЕСТА, ПОКА МАЛЫШ СТОРАЖ НЕ СДЕЛАЕТ СВОИ ДЕЛА (ˆˆ)
    Нравится, что повествование идёт цельно - доходим до определённого этапа, когда нам нужно дописать функциональность к уже существующим сущностям - топаем и пишем, а не так, что сначала расписали всю начинку сущности и потом просто дёргаем, и никто, кроме автора уже и не понимает зачем? что там делается? почему именно здесь и сейчас?... Нет, тут по другому - и это радует)
    Было озвучено предложение по созданию ролика посвящённого gob (стоп, мы подошли из-за угла...) - голосую и плюсую за появление данного ролика, да и в принципе роликов по стандартным библиотекам (может быть, аля рубрика - Очумелые пакеты - где ведущий показывает возможности и область применения пакета стандартной библиотеки в нормальных/предполагаемых условиях, а потом хоба - и использует его в какой-то дичи - и такой, мол - "а оно ведь и так умеет - не костенейте мозгами, го-воины...(братцы, друзья - кому что больше нравится)". Но в целом это так - мысли по древу)
    P.S. Радует умелая вставка картинок - они не избыточны, всегда к месту и выполняют главную свою работу - заставляют улыбнуться, донести мозгу - что это не только работа, но весело и занимательно - и он такоооой - ЛАааааадно ужжж, пиши на своём галанге!
    P.S.S. В общем, спасибо за урок, и дальнейших успехов!

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety

      Как обычно, спасибо большое за такой развёрнутый фидбэк =)
      Про gob отметил у себя.

  • @svetlana4427
    @svetlana4427 Před 2 lety +5

    Большое спасибо за интересные уроки!

  • @user-wt8yi2wn4h
    @user-wt8yi2wn4h Před rokem

    Здравствуйте, спасибо за уроки. Хотелось бы поподробнее услышать про алиас для типа int 2:36

  • @Sanchellios
    @Sanchellios Před 6 měsíci +1

    Офигенный урок, Николай))

  • @MsAidahar
    @MsAidahar Před 2 lety +1

    крутые видосы

  • @stylizedworld8601
    @stylizedworld8601 Před 2 lety +4

    Радует что видео часто выходят. Уже есть планы что будет дальше после бота?

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +7

      Да, планы есть. Во-первых, я ещё не закончил с серией уроков по архиватору, и планирую довести это до конца.
      После этого попробую отдельные видео записывать, не сериями. Какие-то интересные вещи, которые касаются Go. Например, интерфейсы, context, конкурентность, reflection, atomic, какие-то вопросы оптимизации и т.п.

  • @ironbo2770
    @ironbo2770 Před 2 lety +2

    Николай, спасибо за подробные уроки! Круто было бы увидеть разбор server side, на каком-нибудь фреймворка типа echo и без него, с применение DI.

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety

      Спасибо =) Не очень понял, что имеется ввиду под "разбором server side". Пример написания какого-нибудь API-сервиса с фреймворком и без?

    • @ironbo2770
      @ironbo2770 Před 2 lety

      @@nikolay_tuzov да, верно) P. S. Плюс с авторизацией по токену или сессией в куках) Реально мало полноценной и подробной инфи для начинающих (на русском языке).

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +1

      Окей, понятно) Да, можно что-то подобное сделать.

  • @AlexTomashevich
    @AlexTomashevich Před 11 měsíci +1

    супер, очень понравилось, только по скорости не успеваю, приходится останавливаться и мотать)

    • @nikolay_tuzov
      @nikolay_tuzov  Před 11 měsíci

      Да, была такая проблемка, в новых роликах исправился

  • @jimshtepa5423
    @jimshtepa5423 Před 10 měsíci

    почему save и remove возвращают ошибку а не, например, сохраненную ссылку или айди удаленной ссылки?

  • @Shindos-Kopernik
    @Shindos-Kopernik Před 7 měsíci

    в методе PickRandom переменная file осталась подчеркнута красным, что то не так с кодом

  • @asari999
    @asari999 Před 2 měsíci

    11:10 а почему не сделать слайс из юзеров для пэйджа? тогда все страницы будут в 1 экземпляре и их можно будет хранить в 1 месте.
    12:09 ещё вопрос почему func (s Storage) Save() а не func (s *Storage) Save() ?

  • @damirmirasov3785
    @damirmirasov3785 Před rokem

    4:01 Можно назвать Dispatcher

  • @jimshtepa5423
    @jimshtepa5423 Před 10 měsíci

    почему когда реализуем defer используем дополнительно func а не сразу e.WrapIf?

    • @AiratZa
      @AiratZa Před 5 měsíci

      чтобы присвоить значение err. e.WrapIf просто возвращает его, а не обновляет

  • @hatman8626
    @hatman8626 Před 3 měsíci

    Николай, у тебя кто нибудь проходит код ревью?))

    • @nikolay_tuzov
      @nikolay_tuzov  Před 3 měsíci

      В каком смысле? На работе у нас есть командное код-ревью, любой MR ревьюит вся команда, как правило. То есть, и я смотрю код коллег, и они мой.

  • @deniss5034
    @deniss5034 Před rokem +1

    так и не понял, какая, в данном случае, полезная нагрузка у интерфейса Storage?

  • @MrAlexPop69
    @MrAlexPop69 Před 2 měsíci

    а в чем принципиальное отличие этих двух строк?
    defer func() { _ = f.Close() }()
    defer f.Close()

    • @MrAlexPop69
      @MrAlexPop69 Před 2 měsíci

      в первом случае мы явно игнорируем ошибку возвращаемую методом Close?

  • @Randych
    @Randych Před 2 měsíci

    8:20 по-моему винде уже давно всё равно какие слеши ей кормить.

  • @alqueswan7164
    @alqueswan7164 Před rokem +3

    Автор с такой легкостью пользуется возможностями IDE не уделяя внимание тому что не у всех стоит это IDE хотя бы потому что оно платное, и легким движением руки генерирует половину кода и изменений в нем, очевидно, ехидно понимая, что после всех этих автоматических преобразований код записанный за ним вручную по видео не заработает. Или не понимает. Про автоматически генерящийся import я уже упоминал в комментах под предыдущими роликами. Теперь автоматическое переименовывание переменной. Отличный ход. Мы все ближе к тому что код не заработает. Я понимаю, что можно сходить на Git и скачать итоговый код, но разобраться в коде, который уже написан, в разы сложнее, чем в том коде который ты написал своими руками создавая последовательно его структуру. Это момент обучения. Автор, явно, упускает этот момент. Все очень быстро, круто, клево, но в итоге вангую ничего не заработает.

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem +1

      Справедливое замечание. Я прекрасно понимаю, что не у всех стоит GoLand. Но, с другой стороны, тот же VSCode не намного хуже по функционалу, а местами и лучше. И он бесплатный.
      В любом случае, я всегда стараюсь держать баланс между понятностью и динамичностью. Если я буду переименовывать каждую переменную отдельно руками, ролик станет очень скучным. Но и понятностью не пренебрегаю - в предыдущих роликах я прямо на монтаже вырезал существенные куски, и люди писали что непонятно откуда что берётся, я это учёл и стал меньше вырезать.
      По поводу сгенерированного когда - он ведь всегда представлен на экране. Не все ли равно - напечатал я его у вас на глазах или сгенерировал автоматически? Можно нажать на паузу и почитать, если требуется

    • @alqueswan7164
      @alqueswan7164 Před rokem +1

      @@nikolay_tuzov иногда все настолько быстро, что найти момент где сгенерированный код есть и пол экрана не перекрыто всплывающими подсказками очень трудно. И у меня VSCode и он почему то ничего не дописывает и импорт не генерирует. Может версия какая то. В целом ничего не меняйте, подача отличная. В конечном итоге все равно придется идти за кодом в Git.

    • @DigneZzZ
      @DigneZzZ Před rokem

      @@alqueswan7164 могу скинуть статью как GoLand активировать )

    • @DigneZzZ
      @DigneZzZ Před rokem +2

      На самом деле соглашусь. Все настолько молниеносно рассказывается и пишется, что "понять с нуля" ну прям не возможно. А те кто пишут и воспринимают с такой же скоростью, способны на аналогичные действия самостоятельно :( Поэтому фраза из первого урока "Я хочу чтобы вы научились делать и сами могли дальше совершенствовать" (или типа того) - немного не укладывается в формат подачи )
      Но за видео конечно спасибо!

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

      @@DigneZzZ а что конкретно непонятно? Приходи в наш чатик, обсудим. Если что-то непонятно, я или кто-то из ребят поможет: t.me/+WyjmnP6la_QyYjAy