Sobes.tech
Junior

Go-da dilimlərlə necə işləmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go'dakı dilimlər (slice'lar) massiv deyil, əsas massivdəki bir seqmentə (və ya tamına) istinad edir. Bunlar dinamik məlumat strukturlarıdır.

Dilimlərin yaradılması:

  • Bir massivdən:
// massiv təyin edir
arr := [5]int{1, 2, 3, 4, 5}
// massivdən hissə dilim yaratmaq
s1 := arr[1:4] // s1, arr[1], arr[2], arr[3] elementlərini ehtiva edir
// başqa bir dilim yaratmaq
s2 := arr[:3]  // s2, arr[0], arr[1], arr[2] elementlərini ehtiva edir
// bütün massivə istinad edən dilim
s3 := arr[2:]  // s3, arr[2], arr[3], arr[4] elementlərini ehtiva edir
// bütün massivə istinad edən dilim
s4 := arr[:]
  • make ilə:
// Uzunluğu 5 və qabiliyyəti 5 olan dilim yaratmaq
s := make([]int, 5)
// Uzunluğu 5 və qabiliyyəti 10 olan dilim
s_cap := make([]int, 5, 10)
  • Literal:
s := []int{1, 2, 3}

Dilimlərin əsas xüsusiyyətləri:

  • len(s): hazırkı uzunluğu qaytarır.
  • cap(s): qabiliyyəti (maksimum element sayı) qaytarır.

Elementlərin əlavə olunması (append):

s := []int{1, 2}
s = append(s, 3)      // bir element əlavə edir
s = append(s, 4, 5)   // bir neçə element əlavə edir
s2 := []int{6, 7}
s = append(s, s2...) // başqa dilimdən elementlər əlavə edir

append qabiliyyət kifayət etməzsə, əsas massiv yenidən ayrılır.

Elementlərin silinməsi:

Dilimdən elementlərin silinməsi yeni dilim yaradaraq və ya kopyalayaraq həyata keçirilir.

s := []int{1, 2, 3, 4, 5}
// İndeks i-dəki elementi silmək
i := 2 // 2-indeksdəki elementi silir (yəni 3)
s = append(s[:i], s[i+1:]...)

Dilimlərin kopyalanması:

src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // src-dən dst-yə kopyalayır

copy iki dilimin minimum uzunluğunu kopyalayır.

Dilimlər üzərində iterasiya:

s := []string{"a", "b", "c"}
for i, v := range s {
    // i - indeks, v - dəyər
}
for i := range s {
    // yalnız indeks
}
for _, v := range s {
    // yalnız dəyər
}

Dilimlər referans tiplərdir:

Dilimdəki dəyişikliklər əsas massivə və digər dilimlərə təsir edir.

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
// İndi arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (arr[2] dəyişdi)