Junior — Middle
Wat is het verschil tussen een kaart met een null-waarde en een slice die een null-waarde bevat?
sobes.tech AI
Antwoord van AI
In Go is een kaart (map) met nulwaarde een kaart die niet geïnitialiseerd is en gelijk is aan nil. Een poging om in zo'n kaart te schrijven leidt tot een panic.
Een slice met nulwaarde is een nil-slice, die niet naar een array wijst en een lengte en capaciteit van 0 heeft. Het kan veilig worden gebruikt, bijvoorbeeld voor lezen of doorgeven aan functies.
Belangrijke verschillen:
- map == nil betekent dat de kaart niet is geïnitialiseerd en geen elementen kan accepteren.
- slice == nil betekent dat de slice leeg is en niet naar een array wijst, maar kan worden gebruikt voor lezen (zal leeg zijn) en doorgeven.
Voorbeeld:
var m map[string]int // m == nil
// m["key"] = 1 // panic: toewijzing aan entry in nil-kaart
var s []int // s == nil
fmt.Println(len(s)) // 0
s = append(s, 1) // nu is de slice geïnitialiseerd
Dus, nil-kaart is niet geschikt voor schrijven, en nil-slice is veilig voor lezen en uitbreiden.