Senior
Wat gebeurt er met de gegevens in de tweede slice als deze is gemaakt van de eerste met capaciteit 5, en vervolgens de capaciteit wordt verhoogd tot 10?
sobes.tech AI
Antwoord van AI
Als de tweede slice is gemaakt uit de eerste met capaciteit 5, en vervolgens de capaciteit van de eerste slice wordt vergroot tot 10, veranderen de gegevens in de tweede slice niet automatisch.
Uitleg:
- In Go is een slice een structuur met een pointer naar een array, een lengte en een capaciteit.
- De tweede slice, gemaakt uit de eerste, wijst naar dezelfde basisarray, maar heeft zijn eigen lengte en capaciteit.
- Als de capaciteit van de eerste slice toeneemt (bijvoorbeeld door uit te breiden met append, dat een nieuwe array toewijst), verandert de basisarray van de eerste slice.
- De tweede slice blijft wijzen naar de oude array, omdat deze niet automatisch wordt bijgewerkt.
Resultaat: de tweede slice wijst naar de oude array met capaciteit 5, en wijzigingen in de capaciteit van de eerste slice beïnvloeden haar niet. Als de eerste slice is uitgebreid met het toewijzen van een nieuwe array, blijft de tweede slice wijzen naar de oude array, wat kan leiden tot dataconsistentie.
Voorbeeld:
s1 := make([]int, 0, 5)
s2 := s1[:3] // slice uit s1 met capaciteit 5
s1 = append(s1, 1,2,3,4,5,6) // capaciteit van s1 is nu 10, nieuwe array toegewezen
// s2 wijst nog steeds naar de oude array met capaciteit 5