Senior
Čo sa stane s údajmi v druhom rezu, ak je vytvorený z prvého s kapacitou 5 a potom je kapacita zvýšená na 10?
sobes.tech AI
Odpoveď od AI
Ak je druhý rez vytvorený z prvého s kapacitou 5, a potom je kapacita prvého rezu zvýšená na 10, údaje v druhom reze sa automaticky nezmenia.
Vysvetlenie:
- V Go je rez (slice) štruktúra s ukazovateľom na pole, dĺžkou a kapacitou.
- Druhý rez, vytvorený z prvého, ukazuje na ten istý základný pole, ale má vlastnú dĺžku a kapacitu.
- Ak sa kapacita prvého rezu zväčší (napríklad rozšírením pomocou append, ktorý alokuje nové pole), základný pole prvého rezu sa zmení.
- Druhý rez bude naďalej ukazovať na staré pole, pretože sa automaticky neaktualizuje.
Výsledok: druhý rez bude ukazovať na staré pole s kapacitou 5, a zmeny v kapacite prvého rezu naň nemajú vplyv. Ak bol prvý rez rozšírený priradením nového poľa, druhý rez bude naďalej ukazovať na staré pole, čo môže viesť k nesynchronizovaným dátam.
Príklad:
s1 := make([]int, 0, 5)
s2 := s1[:3] // rez z s1 s kapacitou 5
s1 = append(s1, 1,2,3,4,5,6) // kapacita s1 sa zvýšila na 10, alokovaný nový pole
// s2 stále ukazuje na staré pole s kapacitou 5