Александр Гольцман
Значения в Golang
Значения в Go
В языке программирования Go (или Golang) значения представляют собой данные, хранящиеся в переменных. В отличие от ссылочных типов, большинство значений в Go передаются по копии, что делает язык более предсказуемым в управлении памятью. В этой статье мы рассмотрим, как работают значения в Go, их свойства и важные особенности.
Что такое значение в Go?
Смотрите, в Go значение — это конкретное представление данных определенного типа. Когда вы создаёте переменную, ей присваивается значение, соответствующее её типу. Например:
var x int = 10
var name string = "Golang"
Здесь x
хранит значение 10
типа int
, а name
содержит строку "Golang"
.
Передача значений в Go
Одной из ключевых особенностей Go является передача аргументов в функции по значению. Это означает, что когда вы передаёте переменную в функцию, Go создаёт её копию, а оригинальное значение остаётся неизменным.
Покажу на примере:
func changeValue(num int) {
num = 20
}
func main() {
value := 10
changeValue(value)
fmt.Println(value) // Выведет 10, так как передача шла по значению
}
Как видите, значение value
в main
не изменилось, так как changeValue
работала с его копией.
Изменяемые и неизменяемые значения
Хотя большинство значений в Go передаются по копии, есть исключения, например, срезы (slice) и карты (map). Они передаются как ссылки на данные, что позволяет изменять их содержимое внутри функций.
Вот пример для наглядности:
func modifySlice(s []int) {
s[0] = 99
}
func main() {
nums := []int{1, 2, 3}
modifySlice(nums)
fmt.Println(nums) // Выведет [99, 2, 3]
}
Здесь nums
изменился, потому что срезы передаются как ссылки на подлежащие данные.
Заключение
Go использует строгую модель работы со значениями: простые типы передаются по копии, а сложные структуры, такие как срезы и карты, передаются как ссылки. Это делает код безопасным и предсказуемым. Обязательно учитывайте эти особенности при разработке, чтобы избежать неожиданных изменений данных!