Junior — Middle
Как може да се увеличи размерът на сегмента, предаван на функция в програмен език?
sobes.tech AI
Отговор от AI
В Go, срезът (slice) е структура, която съдържа указател към масив, дължина и капацитет. Ако трябва да увеличите размера на срез, предаден на функция, можете да направите следното:
- Да предадете среза по стойност, но вътре във функцията да създадете нов срез с увеличена дължина или капацитет с помощта на функцията
append. - Ако трябва да промените самия срез (например, да увеличите дължината му) и да видите промените отвън, можете да предадете указател към среза (
*[]T), така вътре във функцията можете да преназначите среза.
Пример за увеличаване на срез вътре във функция с връщане на нов срез:
func extendSlice(s []int, n int) []int {
// Добавяне на n нулеви елемента
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]
}
Ако функцията трябва да промени среза без да връща, може да използвате указател:
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]
}
По този начин, за да увеличите размера на среза във функция, трябва или да връщате нов срез, или да предавате указател към среза.