Cześć, może i proste pytanie, ale staram się zrozumieć jak to dokładnie działa.
Przykład z dokumentacji https://go.dev/tour/moretypes/11
Na górze tworzony jest Slice, czyli pod spodem tworzy się tablica z określoną liczbą elementów. (Dobrze rozumiem?)
Następnie są 3 kroki, które modyfikują slice np. s = s[:0]
Czyli pobieram elementy od pierwszego do zerowego i zapisuje jest w zmiennej s, która jest moim wycinkiem.
Czy przy zrobieniu czegoś takiego pierwotny stan tablicy się nie zmienia?
Czyli tego typu operacje nie mutują mojej tablicy?
Pytam bo wynik mnie troche dziwi.
Za każdym razem capacity jest takie samo czyli posiada pierwotną liczbę elementów 6.
A więc po 3 akcji przypisania wartości do zmiennej s nadal mogę na samym końcu odczytać jej oryginalny stan, jeżeli tylko wskaże odpowiednie indeksy elementów.
Dodatkowo czemu ostatnia akcja s = s[3:3] zmienia capability, a pozostałe nie.
func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)
// Slice the slice to give it zero length.
s = s[:0]
printSlice(s)
// Extend its length.
s = s[:4]
printSlice(s)
// Drop its first two values.
s = s[2:]
printSlice(s)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
Wynik tego kodu to
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]