- Сообщения
- 202
- Реакции
- 0
Особенности
Передача массива в функцию
В Go при передаче массива в функцию передается его копия.
То есть, любая модификация массива внутри функции не отразится на оригинальном массиве, который был передан в аргументе.
Передача слайса в функцию
Если передается слайс, то передается ссылка на данные, на которые указывает слайс. Это значит, что изменения, сделанные внутри функции, затронут оригинальные данные.
Как передать массив по ссылке?
Если вы хотите работать с массивом, не создавая его копию, то можете передать указатель на массив. Указатель передается "по ссылке", поэтому изменения внутри функции сразу отразятся на оригинальном массиве:
- Массив:
- При передаче в функцию создается копия массива.
- Чтобы передать массив по ссылке, используется указатель на массив
*.
- Слайс:
- Передается "по ссылке", то есть как указатель на внутренние данные.
- Изменения в слайсе внутри функции также затрагивают оригинальные данные.
Передача массива в функцию
В Go при передаче массива в функцию передается его копия.
То есть, любая модификация массива внутри функции не отразится на оригинальном массиве, который был передан в аргументе.
Код:
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] (остался без изменений)
}
Передача слайса в функцию
Если передается слайс, то передается ссылка на данные, на которые указывает слайс. Это значит, что изменения, сделанные внутри функции, затронут оригинальные данные.
Код:
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] (массив изменился)
}
Как передать массив по ссылке?
Если вы хотите работать с массивом, не создавая его копию, то можете передать указатель на массив. Указатель передается "по ссылке", поэтому изменения внутри функции сразу отразятся на оригинальном массиве:
Код:
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] (массив изменился)
}