Sobes.tech
Senior

Əgər mən slice ilə işləyirəmsə, onu funksiya parametri kimi götürürəmsə, onunla nəsə edirəm və funksiyadan sonra onunla işləməyə davam edirəmsə — nəyə diqqət etməliyəm? Hansı dəyişiklikləri xaricdən görməyəcəyik?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, dilim (slice) massivə işarə edən göstərici, uzunluq və tutumu olan bir strukturdur. Siz funksiyaya dilim ötürəndə, yalnız bu struktur (göstərici, uzunluq, tutum) kopyalanır, özü massiv deyil.

Əhəmiyyətli olanlar:

  • Funksiya daxilində dilim elementlərində edilən dəyişikliklər (məsələn, s[0] = 10) xaricdən görünəcək, çünki onlar eyni massivə işarə edir.
  • Dilimin öz strukturunda edilən dəyişikliklər (məsələn, yeni dilim təyin etmək s = append(s, 5)) funksiyadan kənarda dilimi təsir etməyəcək, çünki yalnız struktur kopyalanır.

Nümunə:

func modify(s []int) {
    s[0] = 100       // massiv elementini dəyişəcək — xaricdən görünəcək
    s = append(s, 200) // lokal dilimin kopyasını dəyişir — xaricdən görünməz
}

s := []int{1, 2, 3}
modify(s)
fmt.Println(s) // [100 2 3] çap edir, 200 əlavə olunması əks olunmayacaq

Qısaca, dilim elementlərində edilən dəyişikliklər xaricdən görünür, uzunluq və ya tutumda edilən dəyişikliklər (append, slices vasitəsilə) isə görünmür, əgər yeni dilim qaytarmırsınızsa və ya göstərici ötürmürsünüzsə.