Fundamentals

Слайсы и карты в Go: внутренности и подводные камни

Слайсы и карты в Go: внутренности и подводные камни

Слайс — это заголовок (указатель, длина, ёмкость) над общим backing-массивом, и отсюда растут коварные баги: append молча перезаписывает «соседа», nil и пустой слайс не одно и то же. Карты рандомизируют порядок обхода и роняют процесс при конкурентной записи. Разбираем внутренности и подводные камни на живых примерах

Обработка ошибок в Go: значения, обёртки, паники

Обработка ошибок в Go: значения, обёртки, паники

Ошибки в Go — обычные значения, а не исключения: их возвращают, оборачивают через %w, проверяют errors.Is/As сквозь цепочку и объединяют errors.Join. Разбираем sentinel и типизированные ошибки, когда уместны panic/recover, и знаменитый баг «типизированный nil в error != nil»

Redis вглубь: структуры данных и их внутренние кодировки

Redis вглубь: структуры данных и их внутренние кодировки

Redis — не «строковый кэш», а сервер структур данных. Разбираем strings/hashes/lists/sets/zsets/streams и то, что скрыто под ними: внутренние кодировки (listpack, intset, skiplist, quicklist) и правила переключения между компактным и «большим» представлением. Честно: когда какая структура уместна и во что она обходится по памяти и по времени.

Интерфейсы в Go: неявность, itab и ловушка nil

Интерфейсы в Go: неявность, itab и ловушка nil

Интерфейсы в Go удовлетворяются неявно, состоят из пары (тип, значение) и потому таят знаменитую ловушку: интерфейс с типизированным nil внутри сам НЕ равен nil. Разбираем маленькие интерфейсы, «accept interfaces, return structs», внутреннее устройство (itab), type assertions/switch и почему nil-интерфейс — не то, чем кажется

Тьюринг-полнота и выразительность: чему учит brainfuck

Тьюринг-полнота и выразительность: чему учит brainfuck

Для чистых вычислений brainfuck покрывает тот же класс функций, что и Python, — все вычислимые по Тьюрингу, ни одной меньше. И при этом на нём ничего не пишут. Этот разрыв и есть тема: вычислительная мощность и выразительность — две разные оси, а мы их путаем, потому что обычные языки высоки по обеим. Brainfuck разводит их в чистом виде — и заодно объясняет, почему тьюринг-полнота в конфиге или системе типов чаще беда, чем достоинство

Контекст в Go: отмена, дедлайны, values и анти-паттерны

Контекст в Go: отмена, дедлайны, values и анти-паттерны

context.Context — единый механизм отмены, дедлайнов и передачи request-scoped данных сквозь цепочку вызовов. Как отмена распространяется по дереву горутин, почему context идёт первым аргументом и не хранится в структуре, чем опасен WithValue и как не потерять отмену — на живом стенде