Sobes.tech
Junior — Middle

Каква е разликата между карта с нулева стойност и слайс, който съдържа нулева стойност?

sobes.tech AI

Отговор от AI

В Go, карта (map) с нулева стойност е карта, която не е инициализирана и е равна на nil. Опитът за запис в такава карта ще доведе до паника.

Slice с нулева стойност е nil-слайс, който не сочи към масив и има дължина и капацитет 0. Може да се използва безопасно, например за четене или предаване към функции.

Ключови разлики:

  • map == nil означава, че картата не е инициализирана и не може да приема елементи.
  • slice == nil означава, че слайсът е празен и не сочи към масив, но може да се използва за четене (ще бъде празен) и предаване.

Пример:

var m map[string]int // m == nil
// m["key"] = 1 // паника: присвояване към nil карта

var s []int // s == nil
fmt.Println(len(s)) // 0
s = append(s, 1) // сега слайсът е инициализиран

Следователно, nil-картата не е подходяща за запис, а nil-слайсът е безопасен за четене и разширяване.