defer panic
defer panic
  • 16
  • 179 547
Пишем надёжный бэкенд // The 12 Factor App
Часто бывает так, что работа с кодовой базой проекта приносит боль в самых разных аспектах: от внесения изменений и добавления новых фич до развертывания на стенде. Может показаться, что какие-то проблемы являются данностью, и с этим принципиально сложно что-то сделать. К счастью, это относится не ко всему.
Адам Виггинс и другие сотрудники компании Heroku однажды решили составить документ, который помог бы решить многие проблемы с разработкой и эксплуатацией информационных систем. Этот документ называется “The Twelve-Factor App” или «12-факторное приложение». Я предлагаю пройтись по нему и разобрать каждый пункт.
❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала:
Boosty - dfrp.cc/boosty
Patreon - dfrp.cc/patreon
Donation Alerts - donationalerts.com/r/deferpanic
ETH - tomakado.eth
TON - tomakado.ton
BTC - 19xwFstmVQsVYqZP64iMVg1StLNSah6Smo
Telegram: dfrp.cc/telegram
Discord: dfrp.cc/discord
00:00 - Вступление
02:01 - №1. Кодовая база
04:50 - №2. Зависимости
07:04 - №3. Конфигурация
09:26 - №4. Внешние сервисы
10:40 - №5. Сборка, релиз и выполнение
13:02 - №6. Процессы без состояния
14:42 - №7. Привязка портов (port binding)
16:04 - №8. Конкурентность
17:10 - №9. Одноразовые и утилитарные процессы
19:54 - №10. Паритет окружений
23:40 - №11. Логи
25:32 - №12. Инструменты администрирования
Полезные ссылки:
- Оригинальный документ “The Twelve-Factor App”: 12factor.net/
- Сигналы в UNIX: ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB_(Unix)
- Patterns of Enterprise Application Architecture, Martin Fowler: books.google.ge/books/about/Patterns_of_enterprise_application_archi.html?id=FyWZt5DdvFkC&redir_esc=y
- Logs Are Streams, Not files: adam.herokuapp.com/past/2011/4/1/logs_are_streams_not_files/
#golang #backend #архитектура
มุมมอง: 4 069

วีดีโอ

Создаем Telegram-бота для новостей на Go, PostgreSQL и OpenAI API (ChatGPT)
มุมมอง 24Kปีที่แล้ว
В этом ролике мы с вами напишем проект, который не стыдно положить на свой GitHub. Это будет Telegram-бот, который автоматически достаёт свежие новости и статьи про язык программирования Go из разных источников, генерирует для них саммари с помощью OpenAI API (ChatGPT), а затем публикует их в Telegram-канал. И всё это автоматически! Такой проект может послужить отличным преимуществом при поиске...
🎙️ Новая камера, мощь Apple Silicon, ChatGPT, Breaking Bad / defer panic podcast #0
มุมมอง 693ปีที่แล้ว
У меня давно была мысль попробовать делать подкаст. И вот наконец-то я решил начать! Для простоты первый выпуск в режиме соло без гостей, и скорее всего так и останется какое-то время. Формат подкаста такой: я рассказываю, как у меня дела в первую очередь относительно канала, а также рассуждаю вслух на какие-то темы. Первый (нулевой, если быть точнее) выпуск, он же пилот - это эксперимент, поэт...
CLI-интерфейсы по-человечески @PodlodkaShow
มุมมอง 4.3Kปีที่แล้ว
Возможно, вам покажется, что говорить в 2023м о консольных приложениях странно, но в докладе мы покажем, почему CLI-приложения еще актуальны. Разберемся, какие инструменты помогут нам баланс и сделать такие приложения максимально удобными и понятными пользователю. На закуску предложим шаблон с конфигами, который можно унести к себе в команду. ❤️ Реквизиты, если у вас есть желание поддержать мен...
Тесты. Что нужно знать разработчику
มุมมอง 6Kปีที่แล้ว
Разбираемся, что такое автотесты и зачем их писать. ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - dfrp.cc/boosty Patreon - dfrp.cc/patreon Donation Alerts - donationalerts.com/r/deferpanic ETH - tomakado.eth TON - tomakado.ton BTC - 19xwFstmVQsVYqZP64iMVg1StLNSah6Smo Как написать сокращатель ссылок: th-cam.com/video/v6rMPOlPzpk/w-d-xo.html Ссылки по теме роли...
Cокращатель ссылок на Go с нуля до деплоя
มุมมอง 7Kปีที่แล้ว
В этом ролике я пишу сокращатель ссылок на Go, используя Echo в качестве веб-фреймворка и MongoDB как СУБД. Кроме того, в ролике мы прикрутим аутентификацию с помощью GitHub и задеплоим сервис на Digital Ocean. Получить $200 на счёт DigitalOcean: m.do.co/c/a76c4cd7e830 ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - dfrp.cc/boosty Patreon - dfrp.cc/patreon Dona...
🎃 О Vim и процессе обучения. Нужно ли изучать Vim/Neovim?
มุมมอง 7K2 ปีที่แล้ว
Мои импровизированные рассуждения на камеру о том, как подходить к изучению новых инструментов на примере текстового редактора Vim. Полезные ссылки вы найдете в нашем канале в Телеграме: Telegram: t.me/deferpanic Discord: discord.gg/4uw7Fpp2QX ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - boosty.to/deferpanic Patreon - www.patreon.com/deferpanic Donation Aler...
Всё про конкурентность в Go
มุมมอง 19K2 ปีที่แล้ว
Текстовый конспект к видео: Boosty: boosty.to/deferpanic/posts/ad993417-072f-4893-8b56-9778c4dcbf7a Patreon: www.patreon.com/posts/konspekt-k-video-73674718 Полезные ссылки вы найдете в нашем канале в Телеграме: Telegram: t.me/deferpanic Discord: discord.gg/4uw7Fpp2QX Go - это язык, который не просто обладает хорошими инструментами, позволяющими использовать всю мощь многоядерных процессоров с ...
Generics in #Go. Should You Use It?
มุมมอง 4.2K2 ปีที่แล้ว
В этот раз поговорим об одной из самых долгожданных фичах Go - дженериках - инструменте обобщённого программирования. Дженерики - настолько крупное изменение в языке (относительно других), что пройти мимо невозможно. ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - boosty.to/deferpanic Patreon - www.patreon.com/deferpanic Donation Alerts - donationalerts.com/r/d...
Golangci-lint. Повышаем качество кода на Go!
มุมมอง 6K2 ปีที่แล้ว
Поговорим о том, что такое линтеры, и как их правильно настраивать в больших и маленьких проектах. ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - boosty.to/deferpanic Patreon - www.patreon.com/deferpanic Donation Alerts - donationalerts.com/r/deferpanic ETH - tomakado.eth TON - tomakado.ton BTC - 19xwFstmVQsVYqZP64iMVg1StLNSah6Smo Telegram: t.me/deferpanic Dis...
Why #Go Interfaces? / #Golang Interfaces Tutorial
มุมมอง 38K2 ปีที่แล้ว
Разбираемся на примерах, что такое интерфейсы и как использовать. ❤️ Реквизиты, если у вас есть желание поддержать меня и развитие канала: Boosty - boosty.to/deferpanic Patreon - www.patreon.com/deferpanic Donation Alerts - donationalerts.com/r/deferpanic ETH - tomakado.eth TON - tomakado.ton BTC - 19xwFstmVQsVYqZP64iMVg1StLNSah6Smo Telegram: t.me/deferpanic Discord: discord.gg/4uw7Fpp2QX Текст...
Завершаем программы изящно / Graceful Shutdown в #Golang
มุมมอง 15K2 ปีที่แล้ว
Завершаем программы изящно / Graceful Shutdown в #Golang
Разбираемся с контекстами в #Go / туториал по context.Context в #Golang
มุมมอง 42K2 ปีที่แล้ว
Разбираемся с контекстами в #Go / туториал по context.Context в #Golang

ความคิดเห็น

  • @Hande_hoch
    @Hande_hoch 2 วันที่ผ่านมา

    почему в примере с такси иногда возникает дедлок? upd: мне объяснили, почему возникает дэдлок. Объясните плз, как это исправить. Как написать всё правильно. Пример то вроде хороший, и хотелось бы знать, как такое реализовать

  • @cseedrvr6627
    @cseedrvr6627 12 วันที่ผ่านมา

    я сидел на неовиме несколько лет и спрыгнул в jetbrains + vim plugin, осознал что у меня помимо обычной работы еще появилась работа по поддержке своего конфига в нвиме

  • @aleksanderpeshkin2266
    @aleksanderpeshkin2266 25 วันที่ผ่านมา

    Ты это сеньорам расскаживаешь ? 😊

  • @HackFinn
    @HackFinn 25 วันที่ผ่านมา

    Качественный контент. Хочется нажать кнопку лайк несколько раз. TDD и mocks можно отдельными роликами сделать.

  • @developer-oh7ze
    @developer-oh7ze 26 วันที่ผ่านมา

    Классное видео, но есть большая проблема для новичков - монтаж, в процессе много простых действий пропускается, хотя возможно рассчитано, на немного более опытных "студентов"

  • @bdud_
    @bdud_ หลายเดือนก่อน

    зоопарк горутин:) (подача материала/звук/голос топ)

  • @bestia96
    @bestia96 หลายเดือนก่อน

    Нихрена не понятно

  • @Polyak331
    @Polyak331 หลายเดือนก่อน

    все отлично спасибо. меня раздражало только то как ты громко глотаешь. а в целом все полезно!

  • @hyprland
    @hyprland หลายเดือนก่อน

    хорошее видео я посмотрел сорри за ожидание теперь можешь удалять

  • @Disorrder
    @Disorrder 2 หลายเดือนก่อน

    понравилось название канала :D

  • @niqr7800
    @niqr7800 2 หลายเดือนก่อน

    20:40 тут нету синхронизации. Мы все еще можем прочитать сначало из одной горутины, переключиться на другую, прочитать из другой еще до того как первая обновит значение. При таком подходе баланс точно так же может уйти в минус

  • @vladgromov9213
    @vladgromov9213 2 หลายเดือนก่อน

    Поначалу рассказывал нормально, а в последние 5 минут пролетел галопом по Европам. Почти как в лекции про мосты из "Как я встретил вашу маму"

  • @kashirin_vsevolod
    @kashirin_vsevolod 2 หลายเดือนก่อน

    Насколько хорошо нужно знать go, чтобы написать такого бота? Что именно нужно знать, просьба подсказать

    • @deferpanic
      @deferpanic 2 หลายเดือนก่อน

      По идее хватит всего, что рассказывается в ролике. Вот и повод проверить )

  • @JoCkStErTVchannel
    @JoCkStErTVchannel 2 หลายเดือนก่อน

    бит топ

  • @StrangerFromAnotherDay
    @StrangerFromAnotherDay 3 หลายเดือนก่อน

    Хорошее видео* *по версии меня

  • @IvanFedulov
    @IvanFedulov 3 หลายเดือนก่อน

    хотелось бы еще побольше ньюансов о том как передаются параметры с типом заданным как итерфейс. например есть интерфейс context.Context и переменную ctx безопасно передавать из ф-и в ф-ю "по значению". потому что под капотом ctx это уже указатель а не сама структура. а почему оно указатель - непонятно. и как это увидеть не копая исходники пакета context.go - неясно.

  • @ShikeboSharifova
    @ShikeboSharifova 3 หลายเดือนก่อน

    спасибо

  • @ПавелВеткин-о6щ
    @ПавелВеткин-о6щ 3 หลายเดือนก่อน

    ok == false значит канал закрыт !

    • @sunwyx
      @sunwyx 2 หลายเดือนก่อน

      тоже обратил внимание на этот момент и полез в комментарии

  • @obereg2282
    @obereg2282 3 หลายเดือนก่อน

    Непонятно. Рассказываются догмы, которые нужно самому искать где-то и доказывать, что оно действительно так и применяется вот таким образом. Короче, конспект из лекции, в котором студент сам же не разберётся к концу семестра

  • @alexkazimir3835
    @alexkazimir3835 3 หลายเดือนก่อน

    Для более лёгкого входа можно попробовать готовые сборки (AstroVim, LunarVim, NvChad)

  • @ЕгорПетровичев-ь3ю
    @ЕгорПетровичев-ь3ю 3 หลายเดือนก่อน

    Уважаемый человек!

  • @IvanFedulov
    @IvanFedulov 3 หลายเดือนก่อน

    великолепно, очень доходчиво. спасибо!

  • @travisbickle7260
    @travisbickle7260 4 หลายเดือนก่อน

    очень нужно разобраться в теме интерфейсов, посоветуйте еще видосов, тут ничего не понял. Может есть что-то прпроще

  • @НикитаКокарев-в9р
    @НикитаКокарев-в9р 4 หลายเดือนก่อน

    Все же ключевым аргументом в пользу перехода на vim из vscode для меня стал unix way. Когда очередной раз сталкиваешься с петушинной реализацией логики нужного плагина, задумываешься о правильности концепции программных комбайнов.

  • @off746
    @off746 4 หลายเดือนก่อน

    Привет, мне очень нравится твоя подача материала, а так же формат видео в доступной форме. У меня есть предложение для видео, не мог бы ты рассказать, так же показать на примере паттерн Repository в Golang ?

  • @varvaraize
    @varvaraize 4 หลายเดือนก่อน

    как хочется сделать такой бот, но как и парень в предыдущих комментах застряла на подготовке окружения( goose не видит совсем ни на винде, ни на линуксе. или накосячила на предыдущих этапах. когда-нибудь я его одолею!

  • @goldenboyboyboy
    @goldenboyboyboy 4 หลายเดือนก่อน

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

  • @germanytoday3024
    @germanytoday3024 4 หลายเดือนก่อน

    Я в шоке, ты пишешь быстрее чем я успеваю понимать что вокруг происходит

    • @deferpanic
      @deferpanic 4 หลายเดือนก่อน

      Я и правда печатаю быстрее, чем средний человек, но тут скорее магия монтажа )

  • @neon8940
    @neon8940 4 หลายเดือนก่อน

    По-моему самое адекватное объяснение. Спасибо!

  • @omelpub
    @omelpub 4 หลายเดือนก่อน

    очень крутое и понятное видео!

  • @alexp6113
    @alexp6113 5 หลายเดือนก่อน

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

  • @andyyarys4467
    @andyyarys4467 5 หลายเดือนก่อน

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

  • @ОнуфрийНечепуренко
    @ОнуфрийНечепуренко 5 หลายเดือนก่อน

    Vim - для людей с феноменальной памятью. Со мной в универе училась девушка, которая смотрела тетрадь с лекциями, потом закрывала и говорила на какой странице в каком углу находится любой текст. Вот для таких людей Vim идеален. Для меня же необходимость запоминать больше 10 сложных клавиатурных комбинаций - это сразу "нет", безотносительно возможных выгод. Я в школе учил 8 строк стихов примерно весь вечер и всё равно не мог их запомнить. Помучился в Vim и бросил. Видео смотрел в надежде узнать, что Vim бесполезен и не нужен. Увы, автор не обрадовал :)

    • @34-ctp74
      @34-ctp74 4 หลายเดือนก่อน

      ну за месяц может два учится привыкается. Учить стихи надо постепенно

  • @AlexandrIvshin
    @AlexandrIvshin 5 หลายเดือนก่อน

    nil-не всегда тот, за кого себя выдает(с) Где то заплакал питонист.))

  • @asylzhan_ahmetow
    @asylzhan_ahmetow 5 หลายเดือนก่อน

    Далеко не самое лучшее объяснение. Те, кто не знают про интерфейсы ничего не поймут

  • @Mimookrokodill
    @Mimookrokodill 5 หลายเดือนก่อน

    Видео супер

  • @sstansm7f
    @sstansm7f 5 หลายเดือนก่อน

    Общие требования к CLI утилитам из этой презентации 10:42 наличие мануала, актуального утилите. От себя добавлю: имеется юридический аспект, если утилита поставляется пользователю за пределы компании-разработчика. В случае если использование утилиты привело к убыткам у пользователя возможны иски к поставщику утилиты. 11:10 должен быть help вызываемый при помощи флагов -h, --help или при вызове утилиты без аргументов. 14:40 вывод команды: человеко читаемый (по умолчанию) и машинно читаемые форматы, например, json (может быть ещё csv?). 17:15 возможность запуска критических операций в режиме Dry Run. От себя добавлю: должен быть запрос на подтверждение критической операции: yes/no? $ 19:30 отображать ход выполнения длительных операций 20:30 для отображения DEBUG сообщений использовать режим Verbose 21:20 тексты ошибок должны быть понятны пользователю и не должны содержать внутреннюю информацию понятную только программистам 23:10 позиционные аргументы и флаги командной строки должны представлять единообразную систему 24:00 число позиционных аргументов не должно быть больше 2, чтобы пользователь не запутался 24:40 желательно иметь короткие версии для флагов - экономит место 28:10 если много команд, то желательно их поместить в иерархию или дерево команд 29:15 именование команд из 2 позиционных аргументов: object action либо, более редко встречается, - action object. Далее идут флаговые аргументы. 29:55 порядок object action либо action object должен быть единообразным для CLI утилиты 30:45 если выполняется длительная операция, то должен быть graceful shutdown, то есть обработка прерывания от клавиатуры Ctrl+C - закрытие открытых, заблокированных и т.п. ресурсов 31:55 передача аргументов через конфигурационные файлы и переменные окружения 32:40 при смешанной системе передачи аргументов утилите должны быть приоритеты: наибольший приоритет имеют флаги, потом переменные окружения, потом конфиги 33:20 дистрибуция должна требовать от пользователя наименьшее количество шагов по установке 39:30 коды завершения утилиты (exit codes) важны для использования CLI утилиты в сценариях (скриптах) автоматизации

  • @CultureofSpeech
    @CultureofSpeech 5 หลายเดือนก่อน

    Чудесно звучит 🎉 Когда будет продолжение этой темы разговора

  • @storm-kd4op
    @storm-kd4op 5 หลายเดือนก่อน

    вы здорово объясняете. спасибо

  • @victorkochkarev2576
    @victorkochkarev2576 6 หลายเดือนก่อน

    Отличное видео, спасибо вам.

  • @Evg2002
    @Evg2002 6 หลายเดือนก่อน

    спасибо брат

  • @ztarlitz1
    @ztarlitz1 6 หลายเดือนก่อน

    чего вы там все изучаете? мне кто-то лет 25 назад дал конфиг на vim и с тех пор я этим конфигом пользуюсь и чего-то там изучать никакой нужды нет. Мои познания самого vim ограничиваются 15 минутами, которые понадобились на чтение vimtutor. В 99% случаев ничего за пределами этих знаний вам не понадобится. Поэтому сама постановка вопроса стоит ли изучать vim звучит как-то странно, как будто вы теорию супер струн собрались изучать. Взяли да потратили 20 минут времени на vimtutor вот и все изучение.

  • @medencev
    @medencev 6 หลายเดือนก่อน

    13:26 4 аксиома действительна только для небуферизированных каналов func main() { ch := make(chan int, 1) ch <- 1 close(ch) fmt.Println(<-ch, <-ch, "surprise") }

  • @Seniorius
    @Seniorius 6 หลายเดือนก่อน

    Иногда линтер жалуется на интерфейсы. Например нельзя делать возврат интерфейсов

  • @OlzhasKaribayev
    @OlzhasKaribayev 6 หลายเดือนก่อน

    perfect

  • @ТимофейЁлкин-о9е
    @ТимофейЁлкин-о9е 7 หลายเดือนก่อน

    func (m *SQLMap) getContext() context.Context { const DefaultTimeout = time.Duration(60 * time.Second) ctx, cancel := context.WithTimeout(context.Background(), DefaultTimeout) defer cancel() newCtx, cancel := context.WithTimeout(ctx, m.timeout) defer cancel() return newCtx } Так допустимо делать?

    • @deferpanic
      @deferpanic 7 หลายเดือนก่อน

      А зачем? К тому же как произойдет выход из getContext, все созданные внутри контексты отменятся

    • @ТимофейЁлкин-о9е
      @ТимофейЁлкин-о9е 7 หลายเดือนก่อน

      @@deferpanic даа((( что, если нужно натянуть контекст на несколько методов? Причём, таймаут должен быть общим для всех, а доступа к main() нет?