Что такое bucket в Map

«Что такое bucket в Map» — вопрос из категории Golang, который задают на 26% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go, bucket — это внутренняя структура хэш-таблицы (map), содержащая пары ключ-значение. Каждый bucket хранит до 8 элементов. При коллизиях (когда разные ключи попадают в один bucket из-за одинаковых хэшей) используется цепочка (linked list) или перезапись в overflow bucket.

Пример структуры bucket:

type bmap struct {
    tophash [bucketCnt]uint8  // метки хэшей
    keys    [bucketCnt]keyType
    values  [bucketCnt]valueType
    overflow *bmap            // ссылка на overflow bucket
}

При заполнении bucket'a создаётся overflow bucket, что может снижать производительность. Оптимизации в Go 1.17+ улучшили работу с bucket'ами, уменьшив частоту создания overflow.