Media is too big
VIEW IN TELEGRAM
Пишем gRPC сервис на Go - Сервис авторизации / УЛЬТИМАТИВНЫЙ гайд
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для этого workflow
- и др.
00:00 Вступление
01:00 Мой Телеграм-канал, зачем на него подписываться
02:04 Теоретический ликбез
06:49 SSO или Auth?
07:58 Авторизация и аутентификация - в чем разница?
08:31 Архитектура авторизации в нашем сервисе
09:51 Что такое JWT и зачем он нужен?
14:01 Архитектура приложения
16:33 Protobuf контракт
31:24 Пишем SSO: каркас и структура проекта
38:03 Конфигурация приложения
52:32 Настраиваем логгер - log.slog
01:03:56 gRPC-сервер и хэндлеры
01:18:48 Запуск и проверка приложения
01:22:04 Graceful shutdown
01:27:08 Хэндлер Login()
01:34:28 Хэндлер Register()
01:36:01 Хэндлер IsAdmin()
01:36:53 Сервисный слой
01:46:27 Метод RegisterNewUser() и хэширование паролей
01:52:05 Метод Login() и сравнение хэшей паролей
01:58:00 Создание JWT-токена
02:04:45 Миграции базы данных
02:23:05 Слой работы с данными: реализация Storage
02:32:09 Собираем все компоненты воедино
02:37:11 Пишем функциональные тесты
03:05:22 Интеграция с другим сервисом: URL Shortener
03:15:05 Покупка облачного сервера для деплоя
03:19:16 GitHub Actions: настраиваем автоматический деплой
03:36:53 Тестируем задеплоенный сервис
03:41:23 Заключение
03:41:35 Наше сообщество - Gopher Club
03:43:16 Как поддержать развитие канала
Исходный код https://github.com/GolangLessons/sso/tree/guide-version
источник
👉 @golang_lib
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для этого workflow
- и др.
00:00 Вступление
01:00 Мой Телеграм-канал, зачем на него подписываться
02:04 Теоретический ликбез
06:49 SSO или Auth?
07:58 Авторизация и аутентификация - в чем разница?
08:31 Архитектура авторизации в нашем сервисе
09:51 Что такое JWT и зачем он нужен?
14:01 Архитектура приложения
16:33 Protobuf контракт
31:24 Пишем SSO: каркас и структура проекта
38:03 Конфигурация приложения
52:32 Настраиваем логгер - log.slog
01:03:56 gRPC-сервер и хэндлеры
01:18:48 Запуск и проверка приложения
01:22:04 Graceful shutdown
01:27:08 Хэндлер Login()
01:34:28 Хэндлер Register()
01:36:01 Хэндлер IsAdmin()
01:36:53 Сервисный слой
01:46:27 Метод RegisterNewUser() и хэширование паролей
01:52:05 Метод Login() и сравнение хэшей паролей
01:58:00 Создание JWT-токена
02:04:45 Миграции базы данных
02:23:05 Слой работы с данными: реализация Storage
02:32:09 Собираем все компоненты воедино
02:37:11 Пишем функциональные тесты
03:05:22 Интеграция с другим сервисом: URL Shortener
03:15:05 Покупка облачного сервера для деплоя
03:19:16 GitHub Actions: настраиваем автоматический деплой
03:36:53 Тестируем задеплоенный сервис
03:41:23 Заключение
03:41:35 Наше сообщество - Gopher Club
03:43:16 Как поддержать развитие канала
Исходный код https://github.com/GolangLessons/sso/tree/guide-version
источник
👉 @golang_lib
Domain Driven Design в Go – это почти не больно
Как выглядят паттерны DDD (Domain Driven Design) в большом проекте? А самое главное, стоит ли их вообще использовать? Рассмотрим, какими инструментами можно реализовать DDD на Go и оценим, насколько это больно.
Меня зовут Илья Сергунин, я backend-сочинитель в Авито: занимаюсь тем, что передаю смартфоны в хорошие руки. В этой статье попытаюсь объяснить, как можно натянуть DDD на Go без синтаксического сахара и магии Java-подобных языков, и без больших крутых ORM c Data mapper, которые также отсутствуют в Go.
https://habr.com/ru/companies/oleg-bunin/articles/791420/
👉 @golang_lib
Как выглядят паттерны DDD (Domain Driven Design) в большом проекте? А самое главное, стоит ли их вообще использовать? Рассмотрим, какими инструментами можно реализовать DDD на Go и оценим, насколько это больно.
Меня зовут Илья Сергунин, я backend-сочинитель в Авито: занимаюсь тем, что передаю смартфоны в хорошие руки. В этой статье попытаюсь объяснить, как можно натянуть DDD на Go без синтаксического сахара и магии Java-подобных языков, и без больших крутых ORM c Data mapper, которые также отсутствуют в Go.
https://habr.com/ru/companies/oleg-bunin/articles/791420/
👉 @golang_lib
Perforator узнает, где тормозит ваш код
На GitHub выложили код системы непрерывного профилирования, которую Яндекс использует для анализа производительности большинства своих сервисов. Perforator поддерживает нативные (C++, C, Go, Rust) и экспериментально Python и Java. Ещё его можно развёртывать на Kubernetes и локально. Он обеспечивает высокую точность профилей с минимальным оверхедом, рисует быстрые флеймграфы и умеет оптимизировать программы на основе прошлых версий.
Уже сейчас Perforator можно скачать и протестировать самому. Исходный код доступен под лицензией MIT (и GPL-для eBPF-программ) и запускается под x86-64 Linux. Визуализацию работы сервиса нашел здесь.
статья
👉 @golang_lib
На GitHub выложили код системы непрерывного профилирования, которую Яндекс использует для анализа производительности большинства своих сервисов. Perforator поддерживает нативные (C++, C, Go, Rust) и экспериментально Python и Java. Ещё его можно развёртывать на Kubernetes и локально. Он обеспечивает высокую точность профилей с минимальным оверхедом, рисует быстрые флеймграфы и умеет оптимизировать программы на основе прошлых версий.
Уже сейчас Perforator можно скачать и протестировать самому. Исходный код доступен под лицензией MIT (и GPL-для eBPF-программ) и запускается под x86-64 Linux. Визуализацию работы сервиса нашел здесь.
статья
👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Секреты внутреннего устройства планировщика Go
Таймкоды:
00:00 - Введение
03:00 - Потоки операционной системы
07:34 - Легковесные потоки
10:16 - Основные концепции рантайма Go
15:21 - Шасштабирование рантайма Go
18:45 - Локальные очереди
21:45 - Work sharing и work stealing
26:08 - Syscalls в планировщике Go
27:41 - Handoff
34:50 - Netpoller
37:33 - Очереди в планировщике Go
42:28 - Примитивы синхронизации
48:57 - Циклы
52:27 - Курс по Concurrency в Go
источник
👉 @golang_lib
Таймкоды:
00:00 - Введение
03:00 - Потоки операционной системы
07:34 - Легковесные потоки
10:16 - Основные концепции рантайма Go
15:21 - Шасштабирование рантайма Go
18:45 - Локальные очереди
21:45 - Work sharing и work stealing
26:08 - Syscalls в планировщике Go
27:41 - Handoff
34:50 - Netpoller
37:33 - Очереди в планировщике Go
42:28 - Примитивы синхронизации
48:57 - Циклы
52:27 - Курс по Concurrency в Go
источник
👉 @golang_lib
Rill — это набор инструментов для языка Go, предназначенный для создания чистого, компонуемого и основанного на каналах параллелизма. Он упрощает разработку параллельных программ, позволяя строить их из простых и повторно используемых компонентов. Rill снижает объем шаблонного кода, сохраняя при этом естественную модель каналов Go.
Основные возможности Rill:
- Упрощение общих задач параллелизма: Предоставляет более чистый и безопасный способ решения распространенных проблем параллелизма, таких как параллельное выполнение задач или обработка событий в реальном времени. Устраняет необходимость в шаблонном коде и абстрагирует сложности управления горутинами, каналами и ошибками. При этом разработчики сохраняют полный контроль над уровнем параллелизма для всех операций.
- Компонентность и чистота кода: Большинство функций библиотеки принимают каналы Go в качестве входных данных и возвращают новые, преобразованные каналы в качестве выходных данных. Это позволяет объединять их различными способами для построения повторно используемых конвейеров из более простых частей, аналогично Unix-пайпам. В результате параллельные программы становятся последовательностями понятных и повторно используемых операций.
- Централизованная обработка ошибок: Ошибки автоматически распространяются через конвейер и могут быть обработаны в одном месте в конце. Для более сложных сценариев Rill также предоставляет инструменты для перехвата и обработки ошибок в любой точке конвейера.
- Упрощение обработки потоков: Благодаря каналам Go встроенные функции могут обрабатывать потенциально бесконечные потоки, обрабатывая элементы по мере их поступления. Это делает Rill удобным инструментом для обработки данных в реальном времени или работы с большими наборами данных, которые не помещаются в памяти.
- Решения для сложных задач: Библиотека включает готовые функции для пакетной обработки, упорядоченного объединения потоков, map-reduce, разделения потоков, слияния и многого другого. Конвейеры, хотя обычно линейные, могут иметь любую безцикловую топологию (DAG).
- Поддержка пользовательских расширений: Поскольку Rill работает на стандартных каналах Go, легко писать пользовательские функции, совместимые с библиотекой.
- Легковесность: Rill имеет небольшой, типобезопасный API, основанный на каналах, и не имеет зависимостей, что делает его простым для интеграции в существующие проекты. Он также экономно использует ресурсы, гарантируя, что количество выделений памяти и горутин не растет с увеличением размера входных данных.
Быстрый старт:
Рассмотрим практический пример: получение пользователей из API, их активация и сохранение изменений. Он демонстрирует, как контролировать параллелизм на каждом этапе, сохраняя код чистым и управляемым. Функция
Этот пример демонстрирует, как Rill упрощает построение параллельных конвейеров обработки данных, делая код более читаемым и поддерживаемым.
https://github.com/destel/rill
👉 @golang_lib
Основные возможности Rill:
- Упрощение общих задач параллелизма: Предоставляет более чистый и безопасный способ решения распространенных проблем параллелизма, таких как параллельное выполнение задач или обработка событий в реальном времени. Устраняет необходимость в шаблонном коде и абстрагирует сложности управления горутинами, каналами и ошибками. При этом разработчики сохраняют полный контроль над уровнем параллелизма для всех операций.
- Компонентность и чистота кода: Большинство функций библиотеки принимают каналы Go в качестве входных данных и возвращают новые, преобразованные каналы в качестве выходных данных. Это позволяет объединять их различными способами для построения повторно используемых конвейеров из более простых частей, аналогично Unix-пайпам. В результате параллельные программы становятся последовательностями понятных и повторно используемых операций.
- Централизованная обработка ошибок: Ошибки автоматически распространяются через конвейер и могут быть обработаны в одном месте в конце. Для более сложных сценариев Rill также предоставляет инструменты для перехвата и обработки ошибок в любой точке конвейера.
- Упрощение обработки потоков: Благодаря каналам Go встроенные функции могут обрабатывать потенциально бесконечные потоки, обрабатывая элементы по мере их поступления. Это делает Rill удобным инструментом для обработки данных в реальном времени или работы с большими наборами данных, которые не помещаются в памяти.
- Решения для сложных задач: Библиотека включает готовые функции для пакетной обработки, упорядоченного объединения потоков, map-reduce, разделения потоков, слияния и многого другого. Конвейеры, хотя обычно линейные, могут иметь любую безцикловую топологию (DAG).
- Поддержка пользовательских расширений: Поскольку Rill работает на стандартных каналах Go, легко писать пользовательские функции, совместимые с библиотекой.
- Легковесность: Rill имеет небольшой, типобезопасный API, основанный на каналах, и не имеет зависимостей, что делает его простым для интеграции в существующие проекты. Он также экономно использует ресурсы, гарантируя, что количество выделений памяти и горутин не растет с увеличением размера входных данных.
Быстрый старт:
Рассмотрим практический пример: получение пользователей из API, их активация и сохранение изменений. Он демонстрирует, как контролировать параллелизм на каждом этапе, сохраняя код чистым и управляемым. Функция
ForEach
завершает выполнение при первой ошибке, а отмена контекста через defer
останавливает все оставшиеся операции получения.
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Преобразуем срез идентификаторов пользователей в канал
ids := rill.FromSlice([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nil)
// Получаем пользователей из API.
// Параллелизм = 3
users := rill.Map(ids, 3, func(id int) (*mockapi.User, error) {
return mockapi.GetUser(ctx, id)
})
// Активируем пользователей.
// Параллелизм = 2
err := rill.ForEach(users, 2, func(u *mockapi.User) error {
if u.IsActive {
fmt.Printf("Пользователь %d уже активен\n", u.ID)
return nil
}
u.IsActive = true
err := mockapi.SaveUser(ctx, u)
if err != nil {
return err
}
fmt.Printf("Пользователь сохранен: %+v\n", u)
return nil
})
// Обработка ошибок
fmt.Println("Ошибка:", err)
}
Этот пример демонстрирует, как Rill упрощает построение параллельных конвейеров обработки данных, делая код более читаемым и поддерживаемым.
https://github.com/destel/rill
👉 @golang_lib
Статья подробно рассматривает стратегии логирования для Go-разработчиков. Начинается с обсуждения базовых методов логирования с использованием пакета
fmt
, таких как fmt.Print
, fmt.Println
и fmt.Printf
. Затем автор переходит к более продвинутым возможностям, предлагаемым стандартным пакетом log
, который предоставляет автоматическую временную метку, уровни серьезности и возможность записи логов в различные выходные потоки. Отдельное внимание уделяется пакету
slog
, который появился в более новых версиях Go и предлагает более мощный и выразительный API для структурированного логирования, особенно полезного в продакшене. https://www.bytesizego.com/blog/guide-to-logging-in-go
👉 @golang_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔒🚨Микросервисы — это будущее, а их защита — ваше преимущество!
Узнайте, как настроить аутентификацию и авторизацию с помощью OAuth2, JWT и Keycloak на открытом вебинаре «Практика аутентификации и авторизации в микросервисной архитектуре».
Сделайте свои проекты безопасными и удобными! Примените полученные знания на практике и узнайте о лучших подходах от экспертов.
🔴 Встречаемся 20 февраля в 20:00 мск, участники получат скидку на участие в курсе «Microservice Architecture»: https://vk.cc/cIcVGx
Узнайте, как настроить аутентификацию и авторизацию с помощью OAuth2, JWT и Keycloak на открытом вебинаре «Практика аутентификации и авторизации в микросервисной архитектуре».
Сделайте свои проекты безопасными и удобными! Примените полученные знания на практике и узнайте о лучших подходах от экспертов.
🔴 Встречаемся 20 февраля в 20:00 мск, участники получат скидку на участие в курсе «Microservice Architecture»: https://vk.cc/cIcVGx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Как на самом деле устроены каналы в Golang?
Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.
00:00 Вступление
00:38 Какие свойства каналов интересно изучить?
01:22 Проектирование каналов
01:32 В какой области памяти хранятся каналы?
02:00 Структура канала
04:08 Реализация свойств: goroutine-safe и FIFO
05:04 Как работают буфер канала и mutex
07:18 Передача данных в канал
08:21 Получение данных из канала
08:38 Переполнение буфера
09:05 Как устроен планировщик (Scheduler)
10:14 Как поставить горутину на паузу
10:56 Как разбудить горутину: очередь спящих горутин - sendq
13:49 Чтение из переполненного канала
15:57 Пробуждение спящей горутины Sender
17:43 Чтение из пустого канала
18:44 Передача данных напрямую между стэками двух горутин
19:11 Небуферизированные каналы
19:37 Итоги по изучению интересных свойств каналов
20:35 Изучаем код реализации каналов
28:22 Изучаем поведение канала вживую с помощью дебагера
35:23 Как работает Select
37:14 Закрытие канала
38:13 Код закрытия канала
39:20 Итоги: почему каналы спроектированны именно так?
40:48 Заключение
источник
👉 @golang_lib
Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.
00:00 Вступление
00:38 Какие свойства каналов интересно изучить?
01:22 Проектирование каналов
01:32 В какой области памяти хранятся каналы?
02:00 Структура канала
04:08 Реализация свойств: goroutine-safe и FIFO
05:04 Как работают буфер канала и mutex
07:18 Передача данных в канал
08:21 Получение данных из канала
08:38 Переполнение буфера
09:05 Как устроен планировщик (Scheduler)
10:14 Как поставить горутину на паузу
10:56 Как разбудить горутину: очередь спящих горутин - sendq
13:49 Чтение из переполненного канала
15:57 Пробуждение спящей горутины Sender
17:43 Чтение из пустого канала
18:44 Передача данных напрямую между стэками двух горутин
19:11 Небуферизированные каналы
19:37 Итоги по изучению интересных свойств каналов
20:35 Изучаем код реализации каналов
28:22 Изучаем поведение канала вживую с помощью дебагера
35:23 Как работает Select
37:14 Закрытие канала
38:13 Код закрытия канала
39:20 Итоги: почему каналы спроектированны именно так?
40:48 Заключение
источник
👉 @golang_lib
Этот репозиторий Bubble-table содержит TUI-таблицу для терминала, написанную на Go с использованием библиотеки Bubble Tea. Она позволяет создавать настраиваемые таблицы с поддержкой сортировки, выделения строк и динамического обновления.
📌 Ключевые особенности:
- Полная совместимость с TUI-экосистемой Bubble Tea.
- Поддержка кастомных стилей и оформления.
- Управление с клавиатуры.
- Возможность добавления анимаций.
Если работаешь с TUI-приложениями на Go, обязательно загляни в репозиторий!
https://github.com/Evertras/bubble-table
👉 @golang_lib
📌 Ключевые особенности:
- Полная совместимость с TUI-экосистемой Bubble Tea.
- Поддержка кастомных стилей и оформления.
- Управление с клавиатуры.
- Возможность добавления анимаций.
Если работаешь с TUI-приложениями на Go, обязательно загляни в репозиторий!
https://github.com/Evertras/bubble-table
👉 @golang_lib
Хотите писать высокопроизводительный код на Go?
Go — это язык, который сделал параллельное программирование проще и мощнее. Горутины, каналы и лучшие практики — всё это на нашем открытом уроке.
Узнайте, как создавать быстрые и эффективные приложения, овладейте основами многопоточности и сделайте шаг к карьере востребованного Go-разработчика.
Регистрируйтесь на открытый вебинар «Паттерны параллельного программирования» уже сегодня и получите скидку на курс «Go Developer Basic»!
Встречаемся 13 февраля в 20:00: https://vk.cc/cItGqy
Реклама. ООО «Отус онлайн-образование», ОГРН 117774661857
Go — это язык, который сделал параллельное программирование проще и мощнее. Горутины, каналы и лучшие практики — всё это на нашем открытом уроке.
Узнайте, как создавать быстрые и эффективные приложения, овладейте основами многопоточности и сделайте шаг к карьере востребованного Go-разработчика.
Регистрируйтесь на открытый вебинар «Паттерны параллельного программирования» уже сегодня и получите скидку на курс «Go Developer Basic»!
Встречаемся 13 февраля в 20:00: https://vk.cc/cItGqy
Реклама. ООО «Отус онлайн-образование», ОГРН 117774661857
Прикладное введение в eBPF с использованием Go
Автор подробно рассматривает использование eBPF в сочетании с языком Go. eBPF (extended Berkeley Packet Filter) — это мощный инструмент для наблюдения и отладки в ядре Linux, позволяющий выполнять безопасный байт-код в пространстве ядра.
В статье представлены практические примеры, демонстрирующие, как писать и загружать eBPF программы с использованием Go. Автор объясняет, как настроить окружение, установить необходимые зависимости и создать простую eBPF программу, которая отслеживает системные вызовы или сетевой трафик.
Кроме того, рассматриваются инструменты и библиотеки, такие как bpf2go, облегчающие интеграцию eBPF с Go.
https://sazak.io/articles/an-applied-introduction-to-ebpf-with-go-2024-06-06
👉 @golang_lib
Автор подробно рассматривает использование eBPF в сочетании с языком Go. eBPF (extended Berkeley Packet Filter) — это мощный инструмент для наблюдения и отладки в ядре Linux, позволяющий выполнять безопасный байт-код в пространстве ядра.
В статье представлены практические примеры, демонстрирующие, как писать и загружать eBPF программы с использованием Go. Автор объясняет, как настроить окружение, установить необходимые зависимости и создать простую eBPF программу, которая отслеживает системные вызовы или сетевой трафик.
Кроме того, рассматриваются инструменты и библиотеки, такие как bpf2go, облегчающие интеграцию eBPF с Go.
https://sazak.io/articles/an-applied-introduction-to-ebpf-with-go-2024-06-06
👉 @golang_lib
Вот отсортированная база с тонной материала (постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерны в Golang
Паттерн Builder в Golang
Директор в паттерне Builder в Golang
Паттерн Стратегия в Golang
источник
👉 @golang_lib
Паттерн Builder в Golang
Директор в паттерне Builder в Golang
Паттерн Стратегия в Golang
источник
👉 @golang_lib
Ваш код на Go страдает от хаоса в зависимостях?
Новые версии ломают сборку, а приватные репозитории вызывают головную боль?
💡 На открытом вебинаре разберём управление модулями в Go:
▫️Прокси
▫️Локальный кэш
▫️Контроль версий
▫️Безопасность
▫️Оптимизация сборок
🎯 Разберитесь в Semantic Import Versioning и научитесь управлять зависимостями так, чтобы проект был стабильным и предсказуемым.
📅 Встречаемся на открытом вебинаре 27 февраля в 20:00 (мск)!
Все участники получат скидку на большое обучение «Golang Developer. Professional».
🔗 Регистрация открыта: https://vk.cc/cINs62
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Новые версии ломают сборку, а приватные репозитории вызывают головную боль?
💡 На открытом вебинаре разберём управление модулями в Go:
▫️Прокси
▫️Локальный кэш
▫️Контроль версий
▫️Безопасность
▫️Оптимизация сборок
🎯 Разберитесь в Semantic Import Versioning и научитесь управлять зависимостями так, чтобы проект был стабильным и предсказуемым.
📅 Встречаемся на открытом вебинаре 27 февраля в 20:00 (мск)!
Все участники получат скидку на большое обучение «Golang Developer. Professional».
🔗 Регистрация открыта: https://vk.cc/cINs62
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Код на Golang: форматирование и линтинг
00:00 | Вступление
00:08 | Зачем нужно форматирование кода на Go
00:45 | Форматер кода fmt
01:51 | Зачем нужен линтер кода на Go
02:08 | Линтер vet
03:52 | Линтер golangci-lint
06:40 | Линтер gofumpt
06:59 | Запускаем линтер gofumpt в режиме исправления ошибок
07:27 | Конфигурационный файл для golangci-lint
08:09 | Git Hooks
08:34 | Устанавливаем Left Hook
09:29 | Настраиваем запуск golangci-lint перед коммитом
09:37 | Коммитим изменения
09:54 | Заключение
источник
👉 @golang_lib
00:00 | Вступление
00:08 | Зачем нужно форматирование кода на Go
00:45 | Форматер кода fmt
01:51 | Зачем нужен линтер кода на Go
02:08 | Линтер vet
03:52 | Линтер golangci-lint
06:40 | Линтер gofumpt
06:59 | Запускаем линтер gofumpt в режиме исправления ошибок
07:27 | Конфигурационный файл для golangci-lint
08:09 | Git Hooks
08:34 | Устанавливаем Left Hook
09:29 | Настраиваем запуск golangci-lint перед коммитом
09:37 | Коммитим изменения
09:54 | Заключение
источник
👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Распределенное файловое хранилище на Go – Полный курс
Изучите, как создать децентрализованную, полностью распределенную систему хранения файлов с адресацией по содержимому на Go, способную обрабатывать и передавать очень большие файлы. Курс охватывает системное проектирование, низкоуровневое программирование и сетевые протоколы, а также создание высокопрактичного и масштабируемого приложения.
00:00:00 - Building a Decentralized File Storage System
00:16:47 - Accept and Listen
00:37:13 - Hard Handshakes and Error Handling
01:17:28 - Developing a Custom Decoder for TCP Transport
01:20:38 - Implementing Custom Peer-to-Peer Package
01:39:39 - Fixing a Network Connection Error
02:17:41 - Storing and Retrieving Data
02:20:07 - Removing Files and Folders
02:45:27 - Cleaning up code
03:04:03 - Debugging and Helper Functions in Go
03:23:06 - Implementing File Server Options
03:43:01 - Server Configuration Errors
04:02:08 - Debugging and troubleshooting the program
04:36:42 - Broadcasting File to the Network
04:41:25 - Broadcasting and Encoding Data
04:58:35 - Sending and receiving data messages
05:18:19 - Running the Program
05:35:57 - Storing Messages
06:17:40 - Storing the Data
06:19:42 - Buffering and Broadcasting
06:39:03 - Debugging and file retrieval issues
06:59:01 - Dealing with Streams in the Code
07:18:34 - Learning from Mistakes
07:35:07 - Reading and Writing Files
08:12:00 - Encrypting the File
08:14:16 - Caso de prueba para copy decrypt function
08:34:59 - Encrypting and Decrypting Files
09:14:26 - Implementing Distributed File Server
09:18:09 - Implementing a copy function
09:36:05 - Refactoring for Storing and Retrieving Files
09:56:50 - End of Livestream
📺 https://www.youtube.com/watch?v=IoY6bE--A54
👉 @golang_lib
Изучите, как создать децентрализованную, полностью распределенную систему хранения файлов с адресацией по содержимому на Go, способную обрабатывать и передавать очень большие файлы. Курс охватывает системное проектирование, низкоуровневое программирование и сетевые протоколы, а также создание высокопрактичного и масштабируемого приложения.
00:00:00 - Building a Decentralized File Storage System
00:16:47 - Accept and Listen
00:37:13 - Hard Handshakes and Error Handling
01:17:28 - Developing a Custom Decoder for TCP Transport
01:20:38 - Implementing Custom Peer-to-Peer Package
01:39:39 - Fixing a Network Connection Error
02:17:41 - Storing and Retrieving Data
02:20:07 - Removing Files and Folders
02:45:27 - Cleaning up code
03:04:03 - Debugging and Helper Functions in Go
03:23:06 - Implementing File Server Options
03:43:01 - Server Configuration Errors
04:02:08 - Debugging and troubleshooting the program
04:36:42 - Broadcasting File to the Network
04:41:25 - Broadcasting and Encoding Data
04:58:35 - Sending and receiving data messages
05:18:19 - Running the Program
05:35:57 - Storing Messages
06:17:40 - Storing the Data
06:19:42 - Buffering and Broadcasting
06:39:03 - Debugging and file retrieval issues
06:59:01 - Dealing with Streams in the Code
07:18:34 - Learning from Mistakes
07:35:07 - Reading and Writing Files
08:12:00 - Encrypting the File
08:14:16 - Caso de prueba para copy decrypt function
08:34:59 - Encrypting and Decrypting Files
09:14:26 - Implementing Distributed File Server
09:18:09 - Implementing a copy function
09:36:05 - Refactoring for Storing and Retrieving Files
09:56:50 - End of Livestream
📺 https://www.youtube.com/watch?v=IoY6bE--A54
👉 @golang_lib
🤔 Хотите писать гибкий, эффективный и чистый код, но дженерики в Go всё ещё кажутся чем-то непонятным? На бумаге всё выглядит просто, но на практике возникают вопросы: когда их использовать, какие подводные камни и как правильно применять? 🧐
🚀 На открытом вебинаре «Дженерики в Go» 11 марта в 20:00 (мск) разберём:
— Как работают дженерики в Go на практике
— Когда их использовать, а когда не нужно
— Как читать и писать код с дженериками без боли
💡 Хватит обходиться без мощного инструмента!
🎁 Всем участникам — скидка на большое обучение «Golang Developer. Professional».
📌 Регистрируйтесь и переходите на следующий уровень разработки: https://vk.cc/cJlmW7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🚀 На открытом вебинаре «Дженерики в Go» 11 марта в 20:00 (мск) разберём:
— Как работают дженерики в Go на практике
— Когда их использовать, а когда не нужно
— Как читать и писать код с дженериками без боли
💡 Хватит обходиться без мощного инструмента!
🎁 Всем участникам — скидка на большое обучение «Golang Developer. Professional».
📌 Регистрируйтесь и переходите на следующий уровень разработки: https://vk.cc/cJlmW7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576