Junior — Middle
Jaký je rozdíl mezi mapou s nulovou hodnotou a řezem, který obsahuje nulovou hodnotu?
sobes.tech AI
Odpověď od AI
V jazyce Go je mapa (map) s nulovou hodnotou mapa, což znamená, že není inicializovaná a je rovna nil. Pokus o zápis do takové mapy způsobí panic.
Slice s nulovou hodnotou je nil-slice, který neukazuje na pole a má délku a kapacitu 0. Může být bezpečně použit například pro čtení nebo předání funkcím.
Klíčové rozdíly:
- map == nil znamená, že mapa není inicializovaná a nemůže přijímat prvky.
- slice == nil znamená, že slice je prázdný a neukazuje na pole, ale může být použit pro čtení (bude prázdný) a předání.
Příklad:
var m map[string]int // m == nil
// m["key"] = 1 // panic: přiřazení do nil mapy
var s []int // s == nil
fmt.Println(len(s)) // 0
s = append(s, 1) // nyní je slice inicializován
Tedy, nil-mapa není vhodná pro zápis, zatímco nil-slice je bezpečný pro čtení a rozšiřování.