Назад к вопросам
Junior — Middle
77
Какие способы существуют для обработки и использования переданных в функцию слайсов в вашем коде?
Ответ от нейросети
sobes.tech AI
В Go слайсы передаются в функции по значению, но при этом значение слайса содержит указатель на underlying array, длину и ёмкость. Это значит, что изменения элементов слайса внутри функции будут видны снаружи, но изменение самого слайса (например, присвоение нового слайса) — нет.
Основные способы работы с переданными слайсами:
- Изменять элементы слайса напрямую, например
s[0] = 10. - Добавлять элементы с помощью
append. Если при этом происходит перераспределение underlying array, то снаружи изменения не отразятся, если не вернуть новый слайс. - Для изменения длины слайса внутри функции и отражения изменений снаружи можно возвращать новый слайс или передавать указатель на слайс.
Пример:
func modifySlice(s []int) []int {
s[0] = 100 // изменит первый элемент
s = append(s, 200) // может создать новый массив
return s // возвращаем новый слайс
}
func main() {
s := []int{1, 2, 3}
s = modifySlice(s)
fmt.Println(s) // [100 2 3 200]
}