Что такое string interning?

Senior
268 просмотров
AFK Offer AI

String interning — техника, при которой одинаковые строки хранятся в памяти один раз, а все переменные ссылаются на одну и ту же область. Это экономит память, когда в программе много дубликатов строк.

В Go нет встроенного string interning как в Java. Строки в Go иммутабельны, но каждая может иметь свою копию данных. Если ты парсишь CSV с миллионом строк и в колонке "город" 90% значений — "Москва", каждая строка будет отдельным аллоком.

var pool = map[string]string{}

func intern(s string) string { if existing, ok := pool[s]; ok { return existing } pool[s] = s return s }

На практике используют sync.Map или специализированные библиотеки. Ещё один трюк — unique.Handle из Go 1.23, который делает interning из коробки. Это особенно актуально при работе с большими JSON/CSV, логами и протобафами, где повторяющиеся строки жрут гигабайты.

Следующий вопрос

Что такое sysmon goroutine?