Sobes.tech
Junior — Middle

Cum se poate mări dimensiunea segmentului transmis către o funcție într-un limbaj de programare?

sobes.tech AI

Răspuns de la AI

În Go, un slice este o structură care conține un pointer către un array, o lungime și o capacitate. Dacă trebuie să mărești dimensiunea unui slice transmis unei funcții, poți face următoarele:

  • Transmite slice-ul pe valoare, dar în interiorul funcției creează un nou slice cu lungimea sau capacitatea mărite folosind funcția append.
  • Dacă trebuie să modifici propriul slice (de exemplu, să-i crești lungimea) și să fie vizibile modificările în afară, poți transmite un pointer către slice (*[]T), astfel încât în interiorul funcției să poți reasigna slice-ul.

Exemplu de extindere a unui slice în interiorul unei funcții cu returnarea unui nou slice:

func extendSlice(s []int, n int) []int {
    // Adaugă n elemente nule
    s = append(s, make([]int, n)...) 
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = extendSlice(s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Dacă funcția trebuie să modifice slice-ul fără a-l returna, poți folosi un pointer:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

func main() {
    s := []int{1, 2, 3}
    extendSlicePtr(&s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Astfel, pentru a mări dimensiunea unui slice în interiorul unei funcții, trebuie să returnezi un nou slice sau să transmiți un pointer către slice.