Новости

Post Thumbnail

Нужные ограничения

Смысл дженериков - писать код, который работает с разными типами данных. Так не придётся дублировать одну и ту же логику для каждого типа. Но полная свобода в выборе типов может быть излишней. Если функция принимает вообще что угодно (как в случае с [T any]...

Post Thumbnail

Пишем балансир

Вот вроде бы неплохая статья в которой автор рассказывает как написать свой игрушечный балансир на Go. Я такое люблю, мне больше всего нравится такой подход к обучению и погружению в тему - небольшой практический проект Но! Кажется у меня вырабатывается ИИ ...

Post Thumbnail

Сборка Go бинарей с Zig

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

Post Thumbnail

Гонки

Антон продолжает свою серию отличных статей о конкурентности в Go - на этот раз с глубоким разбором состояний гонки. В материале вы найдёте разбор классической проблемы check-then‑set, механизм повторных попыток через compare-and-set, нюансы идемпотентного зак...

Post Thumbnail

Но какова цена?

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

Post Thumbnail

Тулзы для разработки

Замучились переключаться между кучей утилит? DevTUI собрал все нужные инструменты разработчика в одном месте — удобный TUI/CLI интерфейс, и никакой головной боли. Что крутого? - Всё под рукой — больше не нужно держать кучу отдельных программ. - Только лок...

Post Thumbnail

Миграции

Миграции базы данных — важная штука в разработке на Go. Они помогают синхронизировать схему БД с кодом, обновлять структуру данных и поддерживать стабильность приложения при изменениях. Выбор правильного инструмента для миграций сэкономит время, уменьшит ош...

Post Thumbnail

Wails

Wails - это легковесный фреймворк, предназначенный для создания кросс-платформенных GUI приложений рабочего стола на golang и стандартных веб технологиях (Svelte, React, Preact, Vue, Lit, Vanilla JS). Ближайшие аналоги это естественно Electron (JS), Tauri (Rus...

Post Thumbnail

Expr

Пятница и новый язык программирования(почти) Expr - это язык выражений, разработанный специально для Go, который позволяет создавать динамические конфигурации с максимальной точностью, безопасностью и быстродействием. Простой синтаксис Expr в сочетании с бо...

Post Thumbnail

mu, mx или lock?

Именование переменных - казалось бы, мелочь, но как же это важно(как и инвалидация кеша)! Автор рассказывает, как вместо привычного barMtx он сначала решил изучить принятые в проекте практики. Ведь согласованность кода важнее личных предпочтений. На примере...

Post Thumbnail

Структура программы

В процессе разработки программного обеспечения у автора сформировался ряд принципов, подтверждённых практическим опытом. Главный из них: структура имеет решающее значение. В первые годы своей карьеры автор создал CMS, которая была успешно тиражирована более...

Post Thumbnail

Экспоненциальный backoff

Экспоненциальная задержка с добавлением случайного разброса (jitter) — это стандартный подход при вызовах сервисов. Но его можно сделать гораздо проще с помощью таблицы предопределённых значений. Такой подход обладает несколькими преимуществами. Во-первых, ...

Post Thumbnail

Traefik на Rust

Rivet Guard - это главный распределитель трафика в экосистеме Rivet. Его задача — принимать все входящие запросы и грамотно их раскидывать. Фактически, это умный маршрутизатор, который обеспечивает порядок в системе и гарантирует, что каждый запрос окажется в ...

Post Thumbnail

Go для агентов

Агент — это программа, которая работает в цикле и сама решает, что делать дальше. Если объяснять проще: представьте робота, который не просто тупо выполняет заранее прописанные шаги (это был бы просто "рабочий процесс"), а умеет немного думать и выбирать сл...

Post Thumbnail

ZST

Указатели на типы нулевой длины (ZST) могут быть очень полезными для экономии памяти и мощных механизмов проектирования, но взаимодействие с указателями на них может привести к ошибкам Лучше избегайте использования ZST в качестве указателей, предпочитая пр...

Post Thumbnail

Никакого сахара

Одна из самых старых и постоянных претензий к Go касается многословности обработки ошибок. Мы все хорошо (а кто-то, возможно, и болезненно) знакомы с этим шаблоном кода: if err != nil. Уже было довольно много разных пропозалов на тему обработки ошибок. Это и h...

Post Thumbnail

Гол!

Пятница - время новых языков программирования. Сегодня у нас Goal - язык для работы с массивами. Array programming language (язык программирования для работы с массивами) - это тип языков, где операции по умолчанию применяются к целым массивам данных, а не ...

Post Thumbnail

GORM Generics

GORM официально добавил поддержку дженериков Go в своей последней версии (v1.30.0 и выше). Это нововведение существенно улучшает удобство использования и типобезопасность, одновременно устраняя SQL-загрязнение при повторном использовании экземпляров gorm.DB. К...

Post Thumbnail

Что нового в Go

В Go 1.24 появилось множество достойных нововведений: поддержка постквантовой криптографии, полноценная работа с обобщёнными псевдонимами типов (generic type aliases), а также ряд оптимизаций в рантайме, которые значительно снижают нагрузку на CPU для большинс...

Post Thumbnail

DI не нужен

На самом деле нужен, конечно В промышленной разработке на Go dependency injection (DI) часто незаслуженно демонизируют - но только из-за перегруженных DI-фреймворков. Сам же подход DI исключительно полезен. Просто его обычно объясняют через призму ООП-терми...

Post Thumbnail

Synctest

В блоге victoriametrics продолжают публиковаться годные статьи Synctest — это новый механизм, добавленный в Go 1.24. Он позволяет детерминированно тестировать конкурентный код, выполняя горутины в изолированных и контролируемых окружениях. В synctest вре...