Как можно работать с переданным слайсом

«Как можно работать с переданным слайсом» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go слайс передается по значению, но внутри содержит указатель на массив, поэтому изменения элементов будут видны вызывающей стороне. Однако изменение длины или емкости не отразится на оригинале.

func modifySlice(s []int) {
    s[0] = 100 // Изменение элемента - повлияет на оригинал
    s = append(s, 200) // Добавление элемента - не повлияет на оригинал
}

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

Для полного контроля над слайсом можно:

  1. Возвращать измененный слайс
  2. Передавать указатель на слайс (*[]int)
  3. Использовать append и переприсваивание в вызывающем коде

Важно помнить, что append может создать новый массив, если не хватает capacity.