Sobes.tech
Middle

Жаңа нұсқалардағы Go-да карта қалай жұмыс істейді, не өзгерді?

sobes.tech AI

AI-дан жауап

Go-дың жаңа нұсқаларында (Go 1.9-дан бастап) карта ішкі құрылымы айтарлықтай жақсартылды, бұл өнімділікті арттыруға және жадтың фрагментациясын азайтуға бағытталған.

Негізгі өзгерістер:

  • Ашық мекенжайлы хэш-таблица және тізбектер: карта енді бакеттердің (buckets) массиві ретінде жүзеге асырылады, әр бакет бірнеше элементті қамтиды. Қақтығыстар кезінде элементтер бакет ішіндегі байланысты тізімде сақталады.
  • Өсуін оңтайландыру: карта өлшемі артқан кезде, элементтерді біртіндеп қайта бөлу (incremental rehashing) жүзеге асырылады, бұл үзілістерді азайтып, жауап беру уақытын жақсартады.
  • Деректердің жақын орналасуы: Бакеттер ішіндегі элементтер тығыз сақталады, бұл кэш өнімділігін жақсартады.
  • Қауіпсіздік шаралары: Қақтығыстар арқылы DoS шабуылдарын болдырмау үшін хэш-функцияға кездейсоқтық қосылды.

Go-да карта қолданудың мысалы:

m := make(map[string]int)
m["apple"] = 5
value, ok := m["apple"]
if ok {
    fmt.Println("Мән:", value)
}

Ішінде кілт қосқанда, хэш есептеледі, бакет таңдалады және элемент салынады. Толтыру шегі жеткенде, кеңейту және элементтерді қайта бөлу жүзеге асырылады.