12 подписчиков
💬Как в Go происходит передача параметров в функцию?
🔹Параметры в Go всегда передаются по значению. Это значит, что всякий раз, когда мы передаем аргумент в функцию, функция получает копию первоначального значения.
🔹Чтобы работать именно с той же самой переменной, не копируя ее, необходимо использовать адрес этой переменной. При этом сам указатель будет скопирован.
📌Передача базовых типов данных (int, string, bool и т.д.)
func modifyValue(x int) {
x = x * 2
}
func main() {
num := 10
modifyValue(num)
fmt.Println(num) // 10
}
Значение переменной num не изменилось после вызова функции modifyValue, так как она получила копию значения num.
📌Передача срезов и типа map
Срезы и map передаются в функции по ссылке, что означает, что функция получает ссылку на оригинальный объект данных, а не его копию. Изменения, внесенные в срез или map внутри функции, отразятся на оригинальном объекте.
func modifySlice(s []int) {
s[0] = 100
}
func main() {
numbers := []int{1, 2, 3}
modifySlice(numbers)
fmt.Println(numbers) // [100 2 3]
}
📌Передача указателей
Указатели позволяют передавать ссылку на память, в которой хранится значение. Изменения, внесенные в значение, на которое указывает указатель, будут видны за пределами функции.
func modifyWithPointer(x *int) {
*x = *x * 2
}
func main() {
num := 10
modifyWithPointer(&num)
fmt.Println(num) // 20
}
📝Таким образом, передача параметров в функции в Go зависит от типа данных параметра. Базовые типы передаются по значению (копией), а срезы, тип map и указатели передаются по ссылке, что позволяет изменять значения внутри функции и видеть эти изменения за пределами функции.
1 минута
14 сентября 2023
109 читали