Please open Telegram to view this post
VIEW IN TELEGRAM
🤔24🌚13🥱6😁1
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
❤1👍1👏1
Друзья, нас часто спрашивают про публикацию материалов о личном опыте и знаниях в IT. Пора это систематизировать!
Если у вас есть история о том, как вы:
• выросли в профессии
• освоили новые технологии
• сделали крутой карьерный скачок
• эпично лажанулись
• создали интересные проекты
— присылайте свои статьи на почту hello@proglib.io с темой DevLife
Требования простые:
• Реальный опыт
• Конкретные шаги
• От 5000 знаков
• Ссылка на Google Docs
Лучшие истории опубликуем на сайте и в наших соцсетях с общим охватом 1 млн + человек.
Please open Telegram to view this post
VIEW IN TELEGRAM
Go 1.23.5 стала доступна для разработчиков. Это обновление является частью регулярного цикла исправлений и включает в себя исправления ошибок, затрагивающих ключевые области языка и стандартной библиотеки.
Основные изменения в Go 1.23.5:
🖇 Список исправлений
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3👏1
Краткий видеообзор Go 1.24
Если чтение длинных списков изменений и технических деталей - не ваш метод, предлагаю посмотреть наглядное видео с обзором ключевых нововведений в грядущей версии Go 1.24.
👀 Смотреть видео
🐸 Библиотека Go разработчика
Если чтение длинных списков изменений и технических деталей - не ваш метод, предлагаю посмотреть наглядное видео с обзором ключевых нововведений в грядущей версии Go 1.24.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14❤1
🚀 go.nvim — плагин для разработки на Go в Neovim
Для разработчиков на Go, использующих Neovim, плагин go.nvim стал незаменимым инструментом, превращающим редактор в полноценную IDE. Этот плагин объединяет все необходимые функции для комфортной разработки: от базовой подсветки синтаксиса до продвинутых возможностей отладки. Давайте разберём основные возможности go.nvim и посмотрим, как он может улучшить ваш процесс разработки.
🔧 Что умеет go.nvim?
Подсветка синтаксиса и работа с текстом:
➡️ Интеграция с Treesitter для точной и быстрой подсветки синтаксиса.
➡️ Улучшенные текстовые объекты для Go-кода.
Асинхронность:
➡️ Все операции выполняются без блокировки интерфейса благодаря использованию асинхронных функций через libuv.
Поддержка всех возможностей LSP, включая:
➡️ Переход к определению.
➡️ Просмотр референсов.
➡️ Организация импортов.
➡️ Автозаполнение.
Поддержка Go-инструментов:
➡️ Автоматическое выполнение таких команд, как go mod tidy, fillstruct, impl и многих других.
➡️ Генерация и организация кода в один клик.
Отладка (Debugging):
➡️ Интеграция с DAP для отладки Go-приложений прямо из Neovim.
➡️ Настраиваемые файлы конфигурации, такие как launch.json.
Гибкая настройка:
➡️ Поддержка настройки на уровне проектов для индивидуального поведения плагина.
📎 Полное руководство по установке и настройке плагина
🐸 Библиотека Go разработчика
Для разработчиков на Go, использующих Neovim, плагин go.nvim стал незаменимым инструментом, превращающим редактор в полноценную IDE. Этот плагин объединяет все необходимые функции для комфортной разработки: от базовой подсветки синтаксиса до продвинутых возможностей отладки. Давайте разберём основные возможности go.nvim и посмотрим, как он может улучшить ваш процесс разработки.
🔧 Что умеет go.nvim?
Подсветка синтаксиса и работа с текстом:
Асинхронность:
Поддержка всех возможностей LSP, включая:
Поддержка Go-инструментов:
Отладка (Debugging):
Гибкая настройка:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏1
Один энтузиаст решил превратить PlayStation 1 в устройство с поддержкой онлайн-игр, используя Raspberry Pi и Golang. Его проект объединяет технологии прошлого и настоящего: данные с PS1 передаются через последовательный порт (serial) на Raspberry Pi, где они конвертируются в WebSockets.
Как это работает:
🖇 Посмотреть как это реализовано
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤3
Watermill: фреймворк для обработки событий в Go
Watermill — это фреймворк на Go, предназначенный для создания систем, основанных на обработке событий. Его основная задача — упрощение работы с потоками сообщений, а также интеграция различных сервисов через брокеры сообщений.
Возможности и особенности:
➕ Поддержка брокеров сообщений: Kafka, RabbitMQ, NATS, Google Pub/Sub, а также встроенные очереди.
➕ Маршрутизация сообщений: позволяет настроить обработку событий в зависимости от их типа, темы и других параметров.
➕ Гибкость: можно адаптировать фреймворк под разные сценарии использования, от небольших микросервисов до распределенных систем.
➕ Инструменты мониторинга: встроенные логирование и трейсинг помогают отслеживать состояние системы и выявлять проблемы.
Пример использования:
Допустим, нужно настроить обработку заказов в системе электронной коммерции. Заказы отправляются в Kafka, откуда Watermill получает сообщения, преобразует их и передает в очереди RabbitMQ для дальнейшей обработки.
🧑💻Как это выглядит в коде:
❓Где применить:
Watermill подходит для сценариев, где требуется асинхронная обработка данных, масштабируемость и гибкость. Это может быть полезно в системах аналитики, IoT-платформах или при построении микросервисной архитектуры.
🐸 Библиотека Go разработчика
Watermill — это фреймворк на Go, предназначенный для создания систем, основанных на обработке событий. Его основная задача — упрощение работы с потоками сообщений, а также интеграция различных сервисов через брокеры сообщений.
Возможности и особенности:
Пример использования:
Допустим, нужно настроить обработку заказов в системе электронной коммерции. Заказы отправляются в Kafka, откуда Watermill получает сообщения, преобразует их и передает в очереди RabbitMQ для дальнейшей обработки.
🧑💻Как это выглядит в коде:
r := router.NewRouter(router.Config{}, logger)
r.AddHandler(
"order_handler",
"orders",
kafkaSubscriber,
"processed_orders",
rabbitPublisher,
func(msg *message.Message) ([]*message.Message, error) {
// Логика обработки сообщения
return []*message.Message{msg}, nil
},
)
r.Run()
❓Где применить:
Watermill подходит для сценариев, где требуется асинхронная обработка данных, масштабируемость и гибкость. Это может быть полезно в системах аналитики, IoT-платформах или при построении микросервисной архитектуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤2
💡 SQL-транзакции в Go: чисто и эффективно
Работа с транзакциями в Go может быть запутанной: *sql.Tx проникает в бизнес-логику, тестировать сложно, а код теряет чистоту. Наш коллега Go-разработчик предлагает элегантное решение — интерфейс Transactor, который изолирует работу с транзакциями от бизнес-логики.
❓В чём суть
Транзакции обрабатываются через интерфейс:
Ваша логика не знает, используется ли транзакция или нет — всё это абстрагировано в Transactor.
📎 Подробнее про решение в статье
🐸 Библиотека Go разработчика
Работа с транзакциями в Go может быть запутанной: *sql.Tx проникает в бизнес-логику, тестировать сложно, а код теряет чистоту. Наш коллега Go-разработчик предлагает элегантное решение — интерфейс Transactor, который изолирует работу с транзакциями от бизнес-логики.
❓В чём суть
Транзакции обрабатываются через интерфейс:
type Transactor interface {
WithinTransaction(ctx context.Context, func(ctx context.Context) error) error
}
Ваша логика не знает, используется ли транзакция или нет — всё это абстрагировано в Transactor.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍8❤1👏1
🎧 Новый выпуск подкаста о Go
В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.
Основные темы выпуска:
➡️ Выпуск Go версий 1.23.5 и 1.22.11, включающих исправления приватных CVE. Рекомендуется обновиться для поддержания безопасности приложений.
➡️ Обсуждение недавно обнаруженной уязвимости в библиотеке gRPC и её влияние на экосистему Go.
➡️ Представление интерактивного тура по Go 1.24, позволяющего разработчикам ознакомиться с новыми функциями и улучшениями языка.
➡️ Рассмотрение новых возможностей в статическом генераторе сайтов Hugo, полезных для разработчиков, использующих его в своих проектах.
➡️ Обсуждение недавних изменений в грамматике Go, направленных на улучшение читаемости и консистентности кода.
🖇 Слушать обсуждение новостей
🐸 Библиотека Go разработчика
В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.
Основные темы выпуска:
🖇 Слушать обсуждение новостей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19❤2🥰1
🌵🕵️♂️ Git-квест: 10 испытаний для повелителя репозиториев
Привет go-сообщество! Все мы знаем, что с Go разрабатываются быстрые и эффективные программы, а Git помогает управлять всем этим хаосом. Этот тест проверит, насколько ты крут в Git, как и в своем любимом языке!
✏️ Пройти тест
🐸 Библиотека Go разработчика
Привет go-сообщество! Все мы знаем, что с Go разрабатываются быстрые и эффективные программы, а Git помогает управлять всем этим хаосом. Этот тест проверит, насколько ты крут в Git, как и в своем любимом языке!
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22❤2👍2❤🔥1🌚1
🎯 Elasticsearch: Быстрый поиск и аналитика данных
Хотите узнать, как эффективно искать и анализировать данные? Тогда вам точно стоит обратить внимание на Elasticsearch!
🔎 Что такое Elasticsearch?
Elasticsearch — это распределённый поисковый движок с открытым исходным кодом, который позволяет быстро индексировать, искать и анализировать большие объемы данных в реальном времени. Он используется для поиска по текстам, журналам событий, аналитики, мониторинга и многого другого.
🚀 Ключевые возможности Elasticsearch
➡️ Наращивает мощности по мере роста данных.
➡️ Поддержка сложных запросов и фильтров для различных типов данных.
➡️ Мощные функции поиска по текстам с учётом морфологии, синонимов и стоп-слов.
💡 Почему стоит использовать Elasticsearch?
• Подходит для работы с большими объёмами данных.
• Настройка индексов, шардов и реплик для оптимальной производительности.
• Поддержка множества инструментов и клиентов для интеграции с различными языками программирования.
🗄 Структура данных в Elasticsearch
Данные в Elasticsearch организованы в виде индексов, документов и полей. Каждый документ хранится в JSON формате, что делает его удобным для поиска и анализа.
➖ Индекс - это коллекция документов, имеющих схожие характеристики. Например, индекс для логов приложения может называться app-logs.
➖ Документ - это основная единица хранения данных в Elasticsearch. Каждый документ представляет собой JSON-объект, содержащий набор полей и их значений. Например, документ логов может выглядеть так:
➖ Поле - это ключ-значение пара внутри документа. Поля могут быть различных типов: строки, числа, даты и т.д.
📚 Где найти больше информации?
• Документация
• GitHub
🐸 Библиотека Go разработчика
Хотите узнать, как эффективно искать и анализировать данные? Тогда вам точно стоит обратить внимание на Elasticsearch!
🔎 Что такое Elasticsearch?
Elasticsearch — это распределённый поисковый движок с открытым исходным кодом, который позволяет быстро индексировать, искать и анализировать большие объемы данных в реальном времени. Он используется для поиска по текстам, журналам событий, аналитики, мониторинга и многого другого.
🚀 Ключевые возможности Elasticsearch
• Подходит для работы с большими объёмами данных.
• Настройка индексов, шардов и реплик для оптимальной производительности.
• Поддержка множества инструментов и клиентов для интеграции с различными языками программирования.
🗄 Структура данных в Elasticsearch
Данные в Elasticsearch организованы в виде индексов, документов и полей. Каждый документ хранится в JSON формате, что делает его удобным для поиска и анализа.
{
"timestamp": "2025-01-23T16:55:00",
"level": "INFO",
"message": "Application started"
}
📚 Где найти больше информации?
• Документация
• GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🌚4
Веб-краулер — это программа, которая автоматически обходит веб-страницы, собирает информацию и анализирует её. Обычно краулеры используются для индексации веб-страниц поисковыми системами (например, Googlebot для Google) или для автоматического сбора данных, таких как цены, рейтинги или текст.
Этапы работы веб-краулера:
Пример: веб-краулер может пройтись по страницам интернет-магазина и собрать информацию о товарах: цены, отзывы, наличие и описание.
💻 Пример реализации веб-краулера
Если хочется посмотреть пошаговую реализацию, то советуем посмотреть статью. В ней описано как реализовать веб-краулер, чтобы мониторить цены на телефоны. Верим, что фантазия на этом не остановится и вы реализуете самые полезные краулеры!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤5
🔄 Обновление Revive
Revive — это быстрый и настраиваемый линтер для языка Go, предназначенный для улучшения качества кода и повышения производительности разработки. Недавно был выпущен релиз версии v1.6.0, включающий следующие изменения:
Основные изменения в версии v1.6.0:
➡️ Рефакторинг правил:
• Оптимизация правила error-return путем замены обхода AST на итерацию по декларациям.
• Улучшение правила flag-param с аналогичной заменой метода обхода.
• Модификация правила modifies-value-receiver для повышения эффективности.
➡️ Исправления:
• Корректировка регулярного выражения в правиле filename-format для правильной обработки расширения файлов .go.
• Обновление документации RULES_DESCRIPTIONS.md для улучшения описаний правил.
➡️ Новые возможности:
• Добавлено новое правило use-errors-new, рекомендующее использование errors.New для создания новых ошибок.
➡️ Прочие улучшения:
• Улучшено определение сортируемых элементов в коде.
• Добавлены недостающие тесты для правила var-declarations и исправлены проблемы с типами any/interface{}.
• Обновлен файл go.sum и выполнена очистка кода в правилах.
📎 Полный список изменений
🐸 Библиотека Go разработчика
Revive — это быстрый и настраиваемый линтер для языка Go, предназначенный для улучшения качества кода и повышения производительности разработки. Недавно был выпущен релиз версии v1.6.0, включающий следующие изменения:
Основные изменения в версии v1.6.0:
• Оптимизация правила error-return путем замены обхода AST на итерацию по декларациям.
• Улучшение правила flag-param с аналогичной заменой метода обхода.
• Модификация правила modifies-value-receiver для повышения эффективности.
• Корректировка регулярного выражения в правиле filename-format для правильной обработки расширения файлов .go.
• Обновление документации RULES_DESCRIPTIONS.md для улучшения описаний правил.
• Добавлено новое правило use-errors-new, рекомендующее использование errors.New для создания новых ошибок.
• Улучшено определение сортируемых элементов в коде.
• Добавлены недостающие тесты для правила var-declarations и исправлены проблемы с типами any/interface{}.
• Обновлен файл go.sum и выполнена очистка кода в правилах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤1
go-app — это пакет для создания прогрессивных веб-приложений (PWA) с использованием языка программирования Go и WebAssembly.
• Позволяет описывать UI-компоненты с помощью Go-кода, что упрощает разработку и поддержку приложений.
• Использует стандартную модель HTTP Go, обеспечивая совместимость и простоту интеграции.
• Приложения могут работать без подключения к интернету, что повышает их доступность и удобство для пользователей.|
• Обеспечивает оптимизацию для поисковых систем, улучшая видимость приложений в результатах поиска.
go get -u github.com/maxence-charriere/go-app/v10/pkg/app
type HelloWorld struct {
app.Compo
}
func (h *HelloWorld) Render() app.UI {
return app.Div().Body(
app.H1().Text("Hello, World!"),
)
}
func main() {
app.Route("/", &HelloWorld{})
app.RunWhenOnBrowser()
http.Handle("/", &app.Handler{
Name: "Hello World App",
Description: "Простое приложение на go-app",
})
http.ListenAndServe(":8080", nil)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15👏5❤4
Если вы пишете на Go, вы наверняка используете слайсы и функцию append. Но знаете ли вы, что append может привести к неожиданным багам, если не понимать, как она работает? Давайте разберем, как избежать подводных камней.
❓Как работает append?
Функция append добавляет элементы в срез и возвращает новый срез. Однако есть нюанс: если емкость исходного среза достаточна, append изменит его. Если нет — создаст новый срез с новым базовым массивом.
go slice := []int{1, 2, 3}
newSlice := append(slice, 4)
slice[0] = 99
fmt.Println(newSlice)
Возможные проблемы:
Как избежать проблем?
Если вам нужно изменить срез, не затрагивая исходный, используйте функцию copy или явно создавайте новый срез.
go original := []int{1, 2, 3}
copied := make([]int, len(original))
copy(copied, original)
copied[0] = 99
fmt.Println(original)
fmt.Println(copied)
Если вы создаете под-срез и хотите контролировать его емкость, используйте полное выражение среза (slice[low:high:max]).
go original := []int{1, 2, 3, 4, 5}
subslice := original[1:4:4]
subslice = append(subslice, 6)
fmt.Println(original)
fmt.Println(subslice)
Если вы хотите быть уверены, что append не изменит исходный срез, проверьте его емкость.
go slice := []int{1, 2, 3}
if cap(slice) == len(slice) {
newSlice := append(slice, 4)
fmt.Println(newSlice)
} else {
newSlice := append(slice, 4)
fmt.Println(newSlice)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱6❤3