Александр Гольцман
Значения в Golang
Значения в Go
В языке программирования Go (или Golang) значения представляют собой данные, хранящиеся в переменных. В отличие от ссылочных типов, большинство значений в Go передаются по копии, что делает язык более предсказуемым в управлении памятью. В этой статье мы рассмотрим, как работают значения в Go, их свойства и важные особенности.
Что такое значение в Go?
В Go значение — это конкретное представление данных определенного типа. Когда вы создаёте переменную, ей присваивается значение, соответствующее её типу. Например:
var x int = 10
var name string = "Golang"
Понимание концепции значений (values) в Golang является важным для эффективной работы с языком. Знание, как передаются значения, как они хранятся в памяти и как с ними взаимодействовать, позволяет писать более предсказуемый и производительный код. Если вы хотите детальнее погрузиться в вопросы значений в Golang, рекомендуем наш курс Основы Golang. На курсе 193 уроков и 16 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Здесь 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 использует строгую модель работы со значениями: простые типы передаются по копии, а сложные структуры, такие как срезы и карты, передаются как ссылки. Это делает код безопасным и предсказуемым. Обязательно учитывайте эти особенности при разработке, чтобы избежать неожиданных изменений данных.
Работа со значениями - один из основных кирпичиков при написании кода на Golang. Чтобы правильно использовать все возможности языка, необходимо глубокое понимание концепции значений. Получить эти знания можно на курсе Основы Golang. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в Go прямо сегодня и станьте уверенным разработчиком.
Постройте личный план изучения Golang до уровня Middle — бесплатно!
Golang — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Golang
Лучшие курсы по теме

Основы Golang
Антон Ларичев
Nest.js с нуля
Антон Ларичев