Category : golang

golang
Go: нужно ли закрывать канал?

ВведениеПри знакомстве с Go, наверное, первое, что узнаешь, так это о возможностях параллелизма. Насколько просто писать многопоточный код на этой технологии. В обеспечении этой простоты не последнюю роль играет наличие такого типа данных, как каналы, которые обеспечивают взаимодействие горутин - легковесных потоков Go. Чтение и запись в этот тип данных приводит к блокировкам, благодаря которым удаётся управлять многопоточностью. Но помимо очевидных операций над каналами их ещё можно закрывать.…

  • четверг, 28 ноября 2024 г. в 00:00:09
golang
«Напомните через месяц?»: как автоматизировать напоминания клиентам с Golang, SQLite и вебхуками

Привет, Хабр! Представим ситуацию: вы клиент. Разговор с менеджером завершён, он предложил вам что-то полезное — услугу, продукт или подписку — и, допустим, вы соглашаетесь: «Почему бы и нет, отличная идея». Менеджер записал ваше согласие и обещал напомнить вам через месяц. Звучит просто.Но вот в реальности ни один менеджер не помнит про сотни обещаний клиентам. И здесь на помощь приходит автоматизация. В этой статье рассмотрим, как построить систему автоматического напоминания, которая избавит…

  • среда, 27 ноября 2024 г. в 00:00:09
golang
Functional options in Go

Необходимость конструкторовКонструкторы в Go нужны, чтобы инкапсулировать логику создания экземпляров структур и предоставлять удобный и безопасный способ их инициализации. Хотя Go не имеет встроенного синтаксиса для конструкторов, как, например, в языках с объектно-ориентированной моделью, создание функций-конструкторов становится необходимым в следующих ситуациях:Установка значений по умолчаниюЕсли для структуры требуются значения по умолчанию, использование конструктора позволяет задать их ц…

  • пятница, 22 ноября 2024 г. в 00:00:06
golang
Создание XDP eBPF программы с использованием C и Golang: пошаговое руководство

В сегодняшнем мире, где всё тесно связано и ориентировано на данные, производительность сети имеет решающее значение для обеспечения эффективного взаимодействия и оптимального пользовательского опыта. XDP и eBPF — это мощные технологияи, которые помогают обрабатывать пакеты с высокой скоростью и оптимизировать работу сети. В этом пошаговом руководстве мы рассмотрим процесс создания XDP eBPF программы с использованием языков C и Golang.XDP позволяет перехватывать пакеты на уровне драйвера сетево…

  • пятница, 22 ноября 2024 г. в 00:00:05
golang
Использование Redis в Go

Redis — хранилище из семейства нереляционных (NoSQL) баз данных. Redis является очень быстрым хранилищем данных благодаря своей архитектуре in-memory. Он идеально подходит для задач, требующих быстрого доступа к данным, таких как кэширование, очереди сообщений, сессионная информация и многое другое. Go также известен своей высокой производительностью за счет компиляции в машинный код и эффективного управления памятью.УстановкаВ качестве клиента для Redis будем использовать библиотеку go-redisgo…

  • четверг, 21 ноября 2024 г. в 00:00:04
golang
Middleware на уровне сетевого стэка в Go

Привет, любители Go! Сегодня мы рассмотрим, как создать middleware на уровне сетевого стэка в Go. Middleware позволяет добавлять полезные функции к HTTP-запросам и ответам: логирование, аутентификация, обработка ошибок и многое другое. Простой пример MiddlewareНачнем с классики – middleware для логирования запросов:package main import ( "log" "net/http" "time" ) // loggingMiddleware логирует начало и конец обработки запроса. func loggingMiddleware(next http…

  • понедельник, 18 ноября 2024 г. в 00:00:07
golang
Проверка готовности приложения к работе в реальном ненадежном мире. Часть 5

Пятая и заключительная часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.Статья состоит из 5 частей, которые выходят по очереди:1. Надежность.2. Масштабируемость/отказоустойчивость.3. Resiliency/отказоустойчивость.4. Безопасность. Процесс разработки. Пр…

  • суббота, 16 ноября 2024 г. в 00:00:09
golang
Создание кастомного балансировщика нагрузки на Go для gRPC с приоритизацией адресов

В процессе разработки микросервисных приложений часто необходимо наладить эффективную и быструю коммуникацию между сервисами. Разработанный Google gRPC предоставляет высокопроизводительный фреймворк для организации такого взаимодействия. Однако стандартные балансировщики нагрузки в gRPC не всегда удовлетворяют специфическим требованиям, особенно когда требуется приоритизация адресов для минимизации сетевых задержек и обеспечения отказоустойчивости.В этой статье я поделюсь опытом создания касто…

  • суббота, 16 ноября 2024 г. в 00:00:08
golang
Внутренности планировщика Go

В настоящий момент занимаюсь наставничеством разработчиков на языке Golang и один из студентов принес очередной вопрос, который заставил задуматься и вникнуть глубже в устройство планировщика Go.Верно для go 1.22Почему данный код всегда будет выводить одинаковый результат?func main() { runtime.GOMAXPROCS(1) var wg sync.WaitGroup wg.Add(5) for i := 0; i < 5; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() } // 4 0 …

  • пятница, 15 ноября 2024 г. в 00:00:08