Go

Тестирование в разных языках: пирамида, Testcontainers, property-based

Тестирование в разных языках: пирамида, Testcontainers, property-based

Одна дисциплина — пирамида тестов, дублёры, property-based и реальные зависимости через Testcontainers — в Go, Java и Python на одном домене. Что идиоматично, чем различаются экосистемы и почему на настройках по умолчанию property-тест находит реальный дефект ненадёжно во всех трёх сразу

Сквозные гарантии и жизнь пайплайна

Сквозные гарантии и жизнь пайплайна

Каждое звено обещает своё, а отвечать приходится за цепочку целиком: как at-least-once складывается в effectively-once, где заканчивается транзакция Kafka, почему дедуп на стоке обязателен и как пайплайн переживает replay, эволюцию схемы и битые события

Flaky-тесты: почему мигают и как чинить

Flaky-тесты: почему мигают и как чинить

Flaky-тест не «случайный» — у каждого мигания детерминированная причина: гонка, время, порядок выполнения, обход map, sleep вместо синхронизации. Разбираем пять классов на живом Go-стенде с реальной частотой мигания и настоящим детектором гонок, чиним каждый детерминизмом — а не ретраями

22 минуты вместо двух: как контейнер на каждый тест съедал прогон — и что помогло

22 минуты вместо двух: как контейнер на каждый тест съедал прогон — и что помогло

Интеграционные тесты Go-сервиса шли 22 минуты и случайно падали по таймауту — списывали на медленную машину. Причина оказалась арифметической: 266 вызовов тестового хелпера поднимали 266 контейнеров Postgres. Разбираем переход на один контейнер и CREATE DATABASE … TEMPLATE, замеры до и после (×10 и ×36), воспроизводимый стенд, границы приёма — права, FORCE, размер шаблона, параллельность пакетов — и честную границу между тем, что измерено, и тем, что осталось правдоподобной гипотезой

Go 1.20 и RSA: что на самом деле замедлилось — и как ловить регрессии производительности

Go 1.20 и RSA: что на самом деле замедлилось — и как ловить регрессии производительности

В Go 1.20 crypto/rsa перешёл на constant-time bigmod ради защиты от тайминговых атак — и просел по скорости. Разбираем на живой матрице версий, где просело сильнее (спойлер: подпись подорожала на 34–61%, а публичные проверка и шифрование — в 5–7 раз), почему, что это значит для JWT, и как поставить CI-гейт, который ловит такие регрессии до прода

ClickHouse-драйверы: когда какой (ch-go, clickhouse-go, JDBC, HTTP)

ClickHouse-драйверы: когда какой (ch-go, clickhouse-go, JDBC, HTTP)

Драйвер ClickHouse — половина производительности: низкоуровневый колоночный ch-go против эргономичного clickhouse-go (native и database/sql), clickhouse-java client-v2 против clickhouse-jdbc, и HTTP-интерфейс. Живой бенчмарк вставки и запроса, когда какой оправдан, карта выбора

Индексы и языки/ORM: зависимость и особенности

Индексы и языки/ORM: зависимость и особенности

Зависят ли индексы от языка программирования и как ORM влияют на их использование: генерируемые запросы и N+1, неявные приведения типов, prepared statements и план, миграции индексов и как из кода проверить, что индекс реально работает

ClickHouse из Go и Java: MergeTree, вставки и запросы

ClickHouse из Go и Java: MergeTree, вставки и запросы

Как устроено семейство MergeTree (ORDER BY, PRIMARY KEY, партиционирование), почему в ClickHouse нельзя вставлять по одной строке и что дают async inserts, и как всё это выглядит из клиентов clickhouse-go и clickhouse-java — нативный протокол против HTTP