Sobes.tech
Junior

Kā strādāt ar slices Go?

sobes.tech AI

Atbilde no AI

Go sēklas nav masīvi, bet norāda uz segmentu (vai visu) pamata masīvā. Tie ir dinamiskas datu struktūras.

Sēklu izveide:

  • No masīva:
    // definējam masīvu
    arr := [5]int{1, 2, 3, 4, 5}
    // izveidojam sēklu no daļas no masīva
    s1 := arr[1:4] // s1 satur elementus arr[1], arr[2], arr[3]
    s2 := arr[:3]  // s2 satur elementus arr[0], arr[1], arr[2]
    s3 := arr[2:]  // s3 satur elementus arr[2], arr[3], arr[4]
    s4 := arr[:]   // s4 norāda uz visu masīvu
    
  • Ar make:
    // Izveido sēklu ar garumu 5 un kapacitāti 5
    s := make([]int, 5)
    // Izveido sēklu ar garumu 5 un kapacitāti 10
    s_cap := make([]int, 5, 10)
    
  • Ar literālo:
    s := []int{1, 2, 3}
    

Galvenās īpašības:

  • len(s): atgriež pašreizējo sēklas garumu.
  • cap(s): atgriež sēklas kapacitāti (maksimālo elementu skaitu, kas var tikt saglabāts pirms reallocation).

Elementu pievienošana (append):

s := []int{1, 2}
s = append(s, 3)      // pievieno vienu elementu
s = append(s, 4, 5)   // pievieno vairākus elementus
s2 := []int{6, 7}
s = append(s, s2...) // pievieno cita sēkla elementus

append var izraisīt pamata masīva reallocation, ja kapacitāte nav pietiekama.

Elementu dzēšana:

Elementu dzēšana no sēklas tiek panākta, izveidojot jaunu sēklu no atlikušajiem elementiem vai kopējot.

s := []int{1, 2, 3, 4, 5}
// Elementa dzēšana pēc indeksa i
i := 2 // dzēš elementu ar indeksu 2 (t.i. 3)
s = append(s[:i], s[i+1:]...)

Sēklu kopēšana:

src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // kopē elementus no src uz dst

copy kopē minimālo no abu sēklu garumiem.

Iterācija pa sēklu:

s := []string{"a", "b", "c"}
for i, v := range s {
    // i - indekss, v - vērtība
}
for i := range s {
    // tikai indekss
}
for _, v := range s {
    // tikai vērtība
}

Sēklas ir norāžu tipi:

Izmaiņas sēklā ir redzamas pamata masīvā un citās sēklās, kas norāda uz to pašu atmiņas apgabalu.

arr := [5]int{1, 2, 3, 4, 5}
s1 := arr[1:4] // [2, 3, 4]
s2 := arr[2:5] // [3, 4, 5]

s1[0] = 99
// Tagad arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (elements arr[2] mainījās)