Sobes.tech
Назад к вопросам
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]
}