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.