Ответ
Да, можно. Слайс в Go — это структура, содержащая указатель на массив, длину и емкость. При передаче слайса в функцию передается копия этой структуры, но указатель ссылается на тот же массив. Поэтому изменения элементов слайса внутри функции будут видны снаружи.
Пример:
func modifySlice(s []int) {
s[0] = 100 // Изменение элемента
s = append(s, 200) // Добавление элемента (не отразится на оригинале, если не хватает capacity)
}
func main() {
s := []int{1, 2, 3}
modifySlice(s)
fmt.Println(s) // [100 2 3]
}
Важно: изменение длины (append) может создать новый массив, если не хватает capacity. Чтобы изменения append сохранились, нужно возвращать новый слайс или передавать указатель на слайс (*[]int).