Глава о переменных — это момент, когда код становится динамичным. В Go работа с переменными имеет свои строгие правила (например, вы не можете объявить переменную и не использовать её — компилятор выдаст ошибку).
Программы, использующие только постоянные значения (литералы), бесполезны. Чтобы сделать код гибким, нам нужны переменные — именованные контейнеры для хранения данных.
Объявление переменных
В Go есть несколько способов создать переменную.
1. Полная форма (var)
Используется ключевое слово var, затем имя, тип и значение:
var x string = "Hello World"
2. Объявление без начального значения (Zero Values)
В Go переменные никогда не бывают “мусором”. Если вы не указали значение, Go присваивает переменной нулевое значение по умолчанию:
var x int // x будет равен 0
var s string // s будет пустой строкой ""
var b bool // b будет false
Это делает программы на Go более предсказуемыми и безопасными.
3. Краткое объявление (:=)
Самый популярный способ внутри функций. Go сам понимает тип данных на основе того, что вы присваиваете:
message := "Привет, Go!" // Компилятор поймет, что это string
count := 10 // Это int
[!IMPORTANT] Ограничение
:=Краткое объявление:=можно использовать только внутри функций. На уровне пакета (вне функций) всегда нужно использовать ключевое словоvar.
Присваивание vs Равенство
В программировании = — это команда «присвоить значение», а не математическое равенство.
x = x + 5— читается как: «взять текущееx, прибавить 5 и сохранить результат обратно вx».x += 5— краткая форма записи того же самого.
Для проверки равенства (вопроса «равно ли это?») используется двойной знак ==:
fmt.Println(x == y) // Выведет true или false
Правила именования
Go поощряет краткость, но понятность.
- CamelCase: Если имя состоит из нескольких слов, используйте
myVariableName(первое слово с маленькой буквы, остальные с большой). - Регистр имеет значение:
xиX— это разные переменные. - Краткость в малом: Если переменная живет всего 3 строки (например, индекс в цикле), допустимо назвать её
i. Если она используется во всем файле, назовите её понятно, напримерuserName.
Область видимости (Scope)
Переменная “живет” только внутри тех фигурных скобок { }, где она была объявлена.
- Локальные переменные: Объявлены внутри функции. Невидимы снаружи.
- Глобальные (пакетные) переменные: Объявлены вне функций. Доступны всем функциям в этом файле (и даже пакете).
package main
import "fmt"
var g = "Я глобальная" // Доступна везде
func main() {
l := "Я локальная" // Доступна только в main
fmt.Println(g, l)
}
func f() {
fmt.Println(g) // Ок
// fmt.Println(l) // Ошибка! l здесь не существует
}
Константы
Если значение не должно меняться (например, число Пи или количество дней в неделе), используйте const. Попытка изменить константу приведет к ошибке компиляции.
const Pi = 3.1415
// Pi = 3 — ошибка!
Определение группы переменных
Чтобы не писать var или const много раз, используйте блоки:
var (
name = "Gopher"
age = 15
isCool = true
)
Интерактивный пример: Ввод данных
Создайте файл и запустите его. Программа попросит вас ввести число и умножит его на два:
package main
import "fmt"
func main() {
fmt.Print("Введите число: ")
var input float64
// Scanf считывает ввод. &input говорит функции, куда записать результат.
fmt.Scanf("%f", &input)
output := input * 2
fmt.Println("Результат:", output)
}
Задачи
- Математика: Что выведет код
x := 10; x += 5; x /= 3; fmt.Println(x)? - Константы: Почему в Go нельзя объявить константу через
:=? - Конвертер: Напишите программу для перевода градусов Фаренгейта в Цельсия. Формула:
C = (F - 32) * 5/9. - Метрика: Напишите программу, которая переводит футы в метры (1 фут = 0.3048 метра). Программа должна запрашивать ввод у пользователя.
Полезные ссылки
- Go by Example: Variables
- Effective Go: Names (рекомендации по именованию).
- Zero Values in Go — подробнее о значениях по умолчанию.