28 Nov 2025, 08:11 UTC221 views8 reactionsread 10 August 2026 Photo
🥹omitempty больше не спасает?
Если вы когда-нибудь сериализовали структуры в JSON, то точно ловили боль с omitempty.
Он нормальный… пока дело не доходит до time.Time, вложенных структур или нестандартных zero-values.
С выходом Go 1.24 появилась штука, которая чинит почти все эти проблемы: omitzero (о ней кто-то помнит?).
Проблема №1: omitempty не понимает сложные типы
Пример: time.Time
type User struct {
Name st…
👍5❤2🔥1
22 Nov 2025, 10:58 UTC208 views7 reactionsread 10 August 2026 Photo
👍 Табличные тесты устарели? Знакомьтесь: f-tests
Табличные тесты в Go часто подаются как «правильный» способ тестировать разные входы одной функции. Но на практике они нередко усложняют чтение кода.
Давайте коротко разберёмся, зачем они нужны, и почему f-tests чаще удобнее.
💻 Пример: тестируем strings.Contains
Три обычных теста:
func TestContains_Start(t *testing.T) {
if !strings.Contains("alpha", "al") {
t.…
🔥5❤1👍1
20 Nov 2025, 19:55 UTC144 views10 reactionsread 10 August 2026 Photo
😌 Маркерные интерфейсы в Go: зачем они существуют и как работают
В Go интерфейсы обычно описывают поведение: «вот набор методов - реализуй их, и ты соответствуешь интерфейсу».
Но есть особая категория - маркерные интерфейсы, которые ничего не делают, но позволяют помечать типы и логически объединять их.
Такая техника встречается редко, но иногда может быть очень удобной.
🔍 Что вообще считается ошибкой в Go?
Базово…
🔥6❤2👍2
18 Nov 2025, 19:19 UTC120 views11 reactionsread 10 August 2026 Photo
🥹Уменьшаем размер докер образа
Когда я впервые собрал Docker-образ для небольшого Go-сервиса, он внезапно занял почти 2 гигабайта.
Для приложения на пару функций - звучит как шутка.
Разбираться пришлось всерьёз: откуда берётся весь этот размер и как сделать образ действительно компактным.
📌 Стартовая точка - ~1.9 GB
Самый прямолинейный Dockerfile выглядит так:
FROM golang:1.24
WORKDIR /app
COPY go.mod go.sum ./
R…
🔥5❤3👍3
17 Nov 2025, 20:46 UTC173 views7 reactionsread 10 August 2026 Photo
😊go build, а что там под капотом? - часть 1
Когда компилятор Go получает файл, он сначала запускает сканер (lexer).
Его задача проста: прочитать код посимвольно и превратить его в токены (ключевые слова, идентификаторы, строки, операторы, скобки).
При этом сканер не понимает контекста - он не знает, что вы объявляете функцию. Он просто распознаёт последовательности символов.
🔍 Что делает сканер
1. Читает код симво…
🔥6👍1
13 Jul 2025, 11:34 UTC321 views6 reactionsread 10 August 2026 Photo
🫠 Enum в Go нет, но я ведь хочется
Enum – важная часть любого веб-приложения. И вот проблема: в Go нет встроенных enum'ов. Вообще. Совсем.
Но есть обходные пути. Большинство из них – костыли на iota.
Разберёмся, как сделать enum, который:
- читается нормально,
- безопасен на этапе компиляции,
- не превращается в 🪦 через месяц.
🌐 Вариант №1: iota
const (
Guest = iota
Member
Moderator
Admin
)
Go сам задас…
👍6
8 Jul 2025, 16:22 UTC208 views9 reactionsread 10 August 2026 Photo
🥴GOMAXPROCS теперь видит контейнер
До этого момента Go думал, что у него целый сервер в распоряжении. Даже если ты ограничивал CPU в Docker или Kubernetes, Go продолжал использовать runtime.NumCPU() – игнорируя cgroups.
Теперь всё поменялось.
🔍 Что такое GOMAXPROCS?
Это настройка рантайма Go, которая управляет количеством логических потоков ОС, одновременно исполняющих горутины:
runtime.GOMAXPROCS(0) // вернёт т…
🔥5👍3❤1
6 Jul 2025, 09:42 UTC273 views4 reactionsread 10 August 2026 Photo
😌 Go 1.25: тесты стали умнее
Пока вы писали t.Log("unexpected status"), в Go наконец-то завезли нормальные атрибуты и метаданные для тестов. Теперь можно делать вменяемую отладку и красиво всё интегрировать в CI.
🔍 t.Attr(key, value)
Теперь можно добавлять атрибуты к тесту. Например:
t.Attr("youtrack-url", "http://...")
t.Attr("description", "Integration test for API")
Вывод:
=== RUN TestAPI
=== ATTR TestAPI y…
🔥4
2 Jul 2025, 06:29 UTC247 views4 reactionsread 10 August 2026 Photo
😋 Аллокаторы в Go: Часть 2 – что под капотом
Пока в Alan Wake 2 герой шарит фонариком по лесу, Go делает то же самое –
ходит в память и пытается найти, где бы ещё что-то выделить.
И чтобы не делать syscall каждый раз, Go аллоцирует память партиями.
🔍 Arena
Когда в heap закончилось место – Go запрашивает арену у ОС:
большой кусок памяти (по умолчанию 64MB)
Она делится на страницы по 8KB. (фото 1)
🍾 Spans – основа…
🔥4
30 Jun 2025, 21:40 UTC237 views5 reactionsread 10 August 2026 Photo
🥹Аллокатор – часть 1
Сегодня играл в Alan Wake 2. Атмосфера, свет, туман – всё как надо. И в какой-то момент, пока герой шарил фонариком по тёмному лесу, я подумал: а что, если наш аллокатор тоже просто идёт вперёд, ничего не возвращая?
Так и работает линейный аллокатор.
🔍 Что такое аллокатор?
Аллокатор — это сущность, которая выделяет память, освобождает и управляет ей.
🏪 Линейный аллокатор
Линейный (или bump)…
👍3❤1🔥1
30 Jun 2025, 08:54 UTC268 views4 reactionsread 10 August 2026 Photo
😭 Я завалю тебя на собеседовании – часть 2
Привет, юный соискатель оффера в ЗаваляndX (старше 40 не берем, только никому не говори, это наши внутренние списки).
Зовём тебя на этап задачек повышенной жёсткости.
Готов? Погнали. В этот раз будет и про выравнивание, и про аллокации, и про nil-ловушки.
1. Оффсет и размер меня слили
type Z struct{}
type F func()
type S struct {
_ [0]*Z
b1, b2 byte
_ struct {
…
😁3🤔1
29 Jun 2025, 16:54 UTC263 views4 reactionsread 10 August 2026 Photo
😋 Weak pointer подробно (ну почти)
Пока мы отдыхаем и ждём новый этап собеса – давайте заглянем под капот Go и посмотрим, как устроены слабые указатели. Спойлер: там всё очень красиво и немного магически.
🔍 Что вообще такое weak.Pointer?
Это указатель, который… ну, как бы и ссылается, но и не мешает сборщику мусора (GC) всё вычистить.
Если на объект остался только такой указатель – GC не станет нянчиться, просто у…
🔥3❤1
Showing the 12 most recent of 16 posts we hold for @letsgolanging. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.