- Массив:
- При передаче в функцию создается копия массива.
- Чтобы передать массив по ссылке, используется указатель на массив
*.
- Слайс:
- Передается "по ссылке", то есть как указатель на внутренние данные.
- Изменения в слайсе внутри функции также затрагивают оригинальные данные.
Передача массива в функцию
В Go при передаче массива в функцию передается его копия.
То есть, любая модификация массива внутри функции не отразится на оригинальном массиве, который был передан в аргументе.
- Code: Select all
package main
import "fmt"
func modifyArray(arr [3]int) {
arr[0] = 42
}
func main() {
original := [3]int{1, 2, 3}
modifyArray(original)
fmt.Println(original) // Вывод: [1 2 3] (остался без изменений)
}
Передача слайса в функцию
Если передается слайс, то передается ссылка на данные, на которые указывает слайс. Это значит, что изменения, сделанные внутри функции, затронут оригинальные данные.
- Code: Select all
package main
import "fmt"
func modifySlice(slice []int) {
slice[0] = 42
}
func main() {
original := []int{1, 2, 3}
modifySlice(original)
fmt.Println(original) // Вывод: [42 2 3] (массив изменился)
}
Как передать массив по ссылке?
Если вы хотите работать с массивом, не создавая его копию, то можете передать указатель на массив. Указатель передается "по ссылке", поэтому изменения внутри функции сразу отразятся на оригинальном массиве:
- Code: Select all
package main
import "fmt"
func modifyArray(arr *[3]int) {
arr[0] = 42
}
func main() {
original := [3]int{1, 2, 3}
modifyArray(&original) // Передаем указатель на массив
fmt.Println(original) // Вывод: [42 2 3] (массив изменился)
}

