Sobes.tech
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