Библиотека Go разработчика | Golang
20.1K subscribers
1.31K photos
28 videos
87 files
3.74K links
Все самое полезное для Go-разработчика в одном канале.

Список наших каналов: https://t.me/proglibrary/9197
Учиться у нас: https://proglib.io/w/32d20779

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv
Прайс: @proglib_advertising
Download Telegram
🧰Обзор архитектуры быстрого сборщика логов на Go

Доклад Владимира Витковского из Ozon на HighLoad++ 2022 о лучших практиках, на которых основан быстрый сборщик логов, используемый в компании.

Владимир рассказывает, как c помощью этого инструмента удалось сократить издержки на сбор логов в 10 раз по CPU и добиться 100% доставляемости логов.

📌Вы узнаете:

✔️Как организована общая архитектура сборщика логов
✔️Как написать быстрый плагин для чтения логов из файлов
✔️Как оптимизировать внутреннюю обработку потока логов
✔️Как правильно распараллелить обработку
✔️Как гарантировать доставку
🧠⚙️ Как научиться критически мыслить: 6 эффективных способов

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

💬Считаете ли вы, что у вас развито критическое мышление?

👍 — да, и это очень помогает мне в жизни и работе
🤔 — да, но оно ничем не помогает
🥱 — нет
🧰Реализация обновляемой блокировки чтения и записи: гайд для Go-разработчика

Обычный RWMutex подходит в большинстве случаев. Но если задача требует долго удерживать блокировку записи, при этом большая часть времени уходит на подготовку к чтению, было бы здорово иметь блокировку чтения, которую можно «обновить» до блокировки записи.

Команда Upstash столкнулась с этой проблемой и разработала UpgradableRWMutex, улучшенную версию стандартного sync.RWMutex.
🤩Сборка мусора, модульное тестирование и горутины сделали Go лучшим выбором для Krater, кроссплатформенного приложения для локальной отладки приложений Laravel (да, тот самый PHP-фреймворк).

🤔Несколько месяцев назад разработчики Krater решили мигрировать на Wails (Go), хотя изначально он был написан на Tauri (Rust). Под катом — опыт команды и предпосылки такого решения👇

🔗 Читать
Обнаружение утечек памяти в Go-приложении: лучшие практики и инструменты

Обзор инструментов, которые вы можете использовать для отслеживания утечек памяти, включая утечки в горутинах.

👉 Читать
Результаты ежегодного опроса разработчиков StackOverflow: 20+ главных инсайтов 2023 года

В данной статье мы собрали 20+ главных инсайтов, которые помогут лучше понять, что происходит в ИТ-сфере в мире.

🔗 Читать статью
🔗 Зеркало
🤔Динамика закрытия пулл-реквестов, прирост кодовой базы, активность разработчиков по часам и по дням недели и многое другое... Что только не придумают для оценки производительности разработчика.

💬А в вашей команде есть метрики оценки личной производительности? Если да, то какие и как они измеряются?

#холивар
📌Go Time

🎤 Опыт, полученный на GopherCon 2023: как организатора, ведущего воркшопов и докладчика
🎤 Семь смертных грехов Gо: по мотивам доклада John Gregory на GopherCon "7 Deadly Gopher Sins"
🎤 Что нового в криптографических библиотеках Go: Filippo Valsorda и Roland Shoemaker из команды Go делятся новостями старой доброй криптографии

📌Cup o' Go
🎤 Gopls 0.14 с включенной телеметрией уже скоро и многое другое
🎤 range over int & range over func в деталях и многое другое
🎤 Интервью с мейнтейнером testcontainers и многое другое

#подкасты
How to Generate Unique IDs in Distributed Systems.pdf
9.1 MB
Как генерировать уникальные идентификаторы в распределенных системах: 6 ключевых стратегий

В распределенном окружении два узла могут одновременно назначать идентификаторы. Задача состоит в том, чтобы эти идентификаторы оставались уникальными, избегая дублирования и обеспечивая согласованность системы. Читайте подробнее на Medium или в PDF:

◆ UUID
◆ NanoID
◆ Sequence
◆ ObjectID
◆ Twitter Snowflake
◆ Sonyflake
🥳 Выпущены релизы Go 1.21.4 и 1.20.11

🔐 Новый выпуск включает исправления безопасности path/filepath (CVE-2023-45283, CVE-2023-45284)

🗣 Анонс
🗃 Скачать
⚡️С выпуском версии 9.3.0 официальный клиент Redis делает большой шаг вперед благодаря прямой поддержке JSON

📌Простой пример того, как начать работу с JSON в Go-Redis:

var ctx = context.Background()
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
})

type Bicycle struct {
Brand string
Model string
Price int
}

bicycle := Bicycle{
Brand: "Velorim",
Model: "Jigger",
Price: 270,
}

_, err := client.JSONSet(ctx, "bicycle:1", "$", bicycle).Result()
if err != nil {
panic(err)
}

res, err := client.JSONGet(ctx, "bicycle:1", ".Model").Result()
if err != nil {
panic(err)
}
fmt.Println("bicycle:1 model is", res)

#новости #инструменты
Хотите готовиться к собеседованию по Go и не только на реальных примерах? Тогда пост ниже для вас👇
🙇‍♂️Коллекция тестовых заданий для самостоятельного выполнения от разных ИТ-компаний, собранная сообществом вместе с командой Хекслет: маст-хэв при подготовке к собесу.

🔗 GitHub
🥳Сегодня четырнадцатый день рождения релиза Go с открытым исходным кодом: за плечами у команды Go и сообщества два полнофункциональных релиза и другие важные фичи

☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки

👉 Подробнее в статье Расса Кокса
Гайд по разработке системы уведомлений в реальном времени с помощью Go + Kafka:

Что такое Kafka?
Как настроить рабочее пространство проекта?
Как создать модели пользователя и уведомлений?
Как настроить Kafka producer?
Как настроить Kafka consumer?
Тестирование проекта

👉 Читать
🔍Статические SQL-запросы часто оказываются недостаточными при необходимости создания условных запросов, а разработка динамических запросов в Go требует глубоких знаний SQL и тонкостей работы с языком.

🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.

📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.

t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
if err != nil {
return err
}

insertStmt, insertArgs, err:= t.Compile(`{{ $length := sub ( len . ) 1 }}
INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at')
VALUES {{ range $i, $v := . }}
( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}},{{else}};{{end -}}
{{end}}`, todos)

if err != nil {
return err
}

_, err := db.Exec(insertStmt, insertArgs...)


👉 GitHub