> Как сделать так, чтобы изменения слайса в функции были видны в вызывающей функции (Go)
Уровень: middle · Роль: backend · Категория: Технические вопросы
Компании: Ozon, Black Wall Group (BWG)
Стек: Go
> Пример ответа
В Go слайс - это структура, содержащая указатель на базовый массив, длину и ёмкость. Чтобы изменения слайса (например, добавление элементов через append) были видны в вызывающей функции, нужно передавать указатель на слайс или возвращать изменённый слайс.
1. Передача указателя на слайс:
GOfunc modify(s *[]int) {*s = append(*s, 4) // изменение видно снаружи}func main() {s := []int{1, 2, 3}modify(&s)fmt.Println(s) // [1 2 3 4]}
2. Возврат изменённого слайса (более идиоматично в Go):
GOfunc modify(s []int) []int {return append(s, 4)}func main() {s := []int{1, 2, 3}s = modify(s)fmt.Println(s) // [1 2 3 4]}
Важно: Если вы только меняете элементы внутри слайса (например, s[0] = 10), то изменения видны и без указателя, так как слайс ссылается на тот же массив. Проблема возникает только при изменении длины/ёмкости через append, когда может выделиться новый массив.
> Похожие задачи по backend
Какие способы копирования слайса в Go существуют
Являются ли мапы в Go потокобезопасными
Как защититься от SQL-инъекций
Какое взаимодействие между сервисами предпочтительнее: синхронное или асинхронное
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью