Тёмный

SQLite в Golang - как использовать, на примере Telegram-бота 

Николай Тузов — Golang
Подписаться 21 тыс.
Просмотров 13 тыс.
50% 1

Опубликовано:

 

28 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 30   
@nikolay_tuzov
@nikolay_tuzov 2 года назад
❤ Если у вас есть желание поддержать развитие канала: www.patreon.com/tuzov boosty.to/nikolay.tuzov - 👾 Мой канал в Telegram: t.me/ntuzov (здесь же будут новости и доп. информация по конкурсу) - 🗣 Наш чат - Gopher Club: t.me/+zsSZ63wEJDs3NGVi - 👀 Golang Digest: t.me/golang_digest - мои регулярные подборки интересных материалов по Go.
@mmkamron
@mmkamron 2 года назад
Отличное видео, спасибо за урок!
@kinvain
@kinvain 2 года назад
У вас очень хорошая подача материала. Много, но всё чётко и по делу. Как личное пожелание - хотелось бы увидеть добавление к боту машины состояния. Например, что бы пользователь мог запустить интерактивный процесс удаления записей. Бот показывает запись, пользователь отвечает нужно ли её удалить или пропустить. Оверинжениринг в случае данного бота, но иногда такое очень нужно, а толковых инструкций нет.
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Спасибо, подумаю над этой идеей
@kinvain
@kinvain 2 года назад
Добавлю свои пять копеект на предмет контекста. Мне кажется вы зря поменяли интерфейс. То есть, были одни методы, была реализация. По началу вы сделали всё правильно - реализовали интерфейс для нового хранилища. Но теперь, если вы вернётесь к файловому то вам придётся и его менять. Что, имхо, неправильно. Понятно что в данном случае вы единственый кто рулит кодом, но если бы пакет файлового хранилища был бы на аутсорсе то возникли бы проблемы. Как альтернативу яп, наверное, предложил бы передавать контекст в методе инициализации sqlite-хранилища. Тогда бы хранилище бы могло реализовывать существующий интерфейс, но скрывало бы что делает вызовы с контекстом. func (s *Storage) SavePage(p *Page) error { retrun s.savePage(s.ctx, p); } Или это плохая идея хранить контекст в структуре?
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Хорошо, что вы задаётесь такими вопросами, но ход мыслей неверный: 1) ошибкой с моей стороны скорее было отсутствие контекста в изначальном интерфейсе. Вы правы - подгонять интерфейс под частные реализации - это плохо. Но контекст важен с подобных интерфейсах - Storage чаще всего будет подразумевать длительные операции, которые нужно ограничивать таймаутом. Если это всего лишь файловая система, то контекст можно просто проигнорировать. Возможно, мне стоило это голосом проговорить в видео. 2) Передавать контекст при инициализации - это совсем мимо. Важно иметь рычаги для управлением конкретными вызовами конкретных функций. На каждый вызов отдельный контекст с отдельным таймаутом. Иначе мы просто отменим сразу все текущие операции, даже хорошие. В этом видео я как раз показал общепринятый подход. Но в целом, повторюсь, хорошо что вы задаётесь этими вопросами и не ленитесь обсуждать. Я бы предложил вам присоединиться к нашему чатику, можем там периодически обсуждать подобное: t.me/+WyjmnP6la_QyYjAy
@yablusgame
@yablusgame 6 месяцев назад
Николай, отличные ролики!! А на счет мультиплеерного бота-игры в телеге не думали? Типа камень-ножницы-бумага или подобной?
@nikolay_tuzov
@nikolay_tuzov 5 месяцев назад
Не думал, но идея интересная, спасибо. Учту на будущее
@yablusgame
@yablusgame 5 месяцев назад
@@nikolay_tuzov так или иначе, спасибо за реакцию. По сути, на вскидку, сложности с лимитами телеграм (частота запросов к api, частота отправки сообщений ботом во всё чаты 1/30 сек, в один чат в зависимости от объёма сообщений, количество коннектов к вебхук если вебхук, и возможно другие) а также реализация комнат горутинами и каналами. Нюансов много. А значит материал (кстати отсутствующий в виде обучения) востребованный. Добра Вам и успехов в Ваших делах!
@Snooper7
@Snooper7 Месяц назад
Николай, добрый день! Предлагаю запилить финальный и очень нужный ролик в этой серии: "Подготовка бота к деплою на VPS через Docker контейнер". Бот отлично работает, хочется его задеплоить, показать друзьям и начать самому активно пользоваться. Докер на VPS уже развернул, а бота в контейнер завернуть ума не хватает. Спасибо за ваш труд и успехов во всех начинаниях.
@OleksandrRiznyk
@OleksandrRiznyk 10 месяцев назад
Николай, а если бот на go делает запрос к какому-то API для получения данных в JSON и отдаёт пользователю их, нужны ли там рутины? Как вообще понять в какой момент они нужны, когда пользователей 100-1000-10000? Бот для разработки на 100 пользователей и 10000 это очень разные вещи или же бот сразу делается таким, чтобы он мог работать с большим количеством юзеров? На ютубе в основном очень простые видео и мало интересные, по сути такой себе деревянный hello world бот, лишь единичные нормальные видео, а у вас едвали не самый лучший или самый лучший плейлист по боту, где объясняется что-то дальше, чем простейшее и объясняется тщательно, чётко и интересно
@Санёчек-ы8ж
@Санёчек-ы8ж Год назад
Отличная подача. Требуем ролик про контексты!)
@qwerty-hk4by
@qwerty-hk4by 2 года назад
Можно где-нибудь целиком код посмотреть?
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Да, конечно: ttps://github.com/GolangLessons/Read-Adviser-Bot Коммиты разбиты по уроукам. Добавил ссылку в описание.
@Dantesik1
@Dantesik1 2 года назад
Это просто шедевральное видео, Николай, я хочу от тебя детей
@Al.Sy.
@Al.Sy. 2 года назад
Тема контекста интересует.
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Учту, спасибо. В будущем точно планирую об этом рассказать.
@stassereduk7053
@stassereduk7053 2 года назад
Спасибо большое за видео! Понятным и доступным языком, как для меня начинающего. Только есть вопрос по установке go-sqlite3 через утилиту go get. При попытке установить выскакивает ошибка: "компилятор C "gcc" не найден". Подскажите в чем может быть причина, где искать решение?
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Не сталкивался с таким. Напиши точный текст ошибки и команду, которую пишешь. А лучше заходи в наш чатик, и задай вопрос там, поможем: t.me/+WyjmnP6la_QyYjAy
@БабаКапа-в7в
@БабаКапа-в7в 2 года назад
Привет, спасибо за серию таких крутых уроков! В твоем репозитории я увидел коммит, в котором ты добавил контекст ко всем методам клиента, добавлял контекст при отправке запроса. И еще ты добавил контекст к методам интерфейса storage, при этом его там не использовал. Ответь пожалуйста, зачем ты это сделал? Где я могу найти ответ на этот вопроc? Может книга есть или статья какая-то?
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Так я в этом видео и объяснял, зачем. Переданный контекст я использовал только в реализации sqlite - передавал его в методы db.
@vladislav_artyukhov
@vladislav_artyukhov 7 месяцев назад
7:07 "Смотрим, что нам возвращает функция Exec. Это какие-то результаты, которые, в данный момент, нам не особенно интересны, и ошибка. Результат мы проигнорируем, а вот ошибку, конечно же, обработаем" - 🤣 Golang development прекрасен
@nikolay_tuzov
@nikolay_tuzov 7 месяцев назад
Лучший комментарий! 😆
@АндрейСидоров-ц3ж
@АндрейСидоров-ц3ж 2 года назад
Небольшой рассинхрон звука и видео.
@nikolay_tuzov
@nikolay_tuzov 2 года назад
Да, бывает такое. С этим порой сложновато бороться(
@TheDavBag
@TheDavBag Год назад
почему у реализаций Storage методы вызываются с поинтером на ресивер?
@arnowt
@arnowt Год назад
Подскажите как красиво передать имя таблицы в SQL запрос? Так чтобы IDE по-прежнему понимал диалект sql Понимаю что можно конкатенацию делать или тот же sprintf, но все это не красиво. А держать имя таблиц в константах бывает очень удобно особенно в стадии разработки.
@arnowt
@arnowt Год назад
В питоне или пхп, я использую форматные строки "select * from {tableName} where id = ?"
@dmitriishitikov9499
@dmitriishitikov9499 9 месяцев назад
А будет ролик про контекст?
@gopherz3144
@gopherz3144 2 года назад
Как же у него голос похож на Геннадия Горина. а так, классный урок
Далее
КОТЯТА В ОПАСНОСТИ?#cat
00:36
Просмотров 921 тыс.
Bearwolf - GODZILLA Пародия Beatrise
00:33
Просмотров 78 тыс.
Хэш-таблицы за 10 минут
13:01
Просмотров 128 тыс.
Всё про конкурентность в Go
23:36
Golang Error Handling Is Better Than You Think!
18:53
Безопасность в Golang | Навыки
1:30:15
КОТЯТА В ОПАСНОСТИ?#cat
00:36
Просмотров 921 тыс.