Write barrier — это код, который рантайм вставляет при каждой записи указателя в память во время работы сборщика мусора. Нужен, чтобы concurrent GC не потерял живые объекты.
Проблема вот в чём: GC сканирует граф объектов параллельно с мутатором (твоим кодом). Пока GC смотрит на объект A, ты мог переставить указатель с A на B, и GC пропустит B — объект будет ошибочно собран. Write barrier ловит такие перестановки и сообщает GC о новых указателях.
Go использует hybrid write barrier (с Go 1.17): комбинация Dijkstra insertion barrier и Yuasa deletion barrier. Он срабатывает и при записи нового указателя, и при затирании старого. Это позволяет GC работать без повторного сканирования стеков, что сильно сокращает паузы. Стоимость — пара наносекунд на каждую запись указателя, но только когда GC активен.