Переменные

Глава о переменных — это момент, когда код становится динамичным. В 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 поощряет краткость, но понятность.

  1. CamelCase: Если имя состоит из нескольких слов, используйте myVariableName (первое слово с маленькой буквы, остальные с большой).
  2. Регистр имеет значение: x и X — это разные переменные.
  3. Краткость в малом: Если переменная живет всего 3 строки (например, индекс в цикле), допустимо назвать её i. Если она используется во всем файле, назовите её понятно, например userName.

Область видимости (Scope)

Переменная “живет” только внутри тех фигурных скобок { }, где она была объявлена.

  1. Локальные переменные: Объявлены внутри функции. Невидимы снаружи.
  2. Глобальные (пакетные) переменные: Объявлены вне функций. Доступны всем функциям в этом файле (и даже пакете).
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 метра). Программа должна запрашивать ввод у пользователя.

Полезные ссылки

  1. Go by Example: Variables
  2. Effective Go: Names (рекомендации по именованию).
  3. Zero Values in Go — подробнее о значениях по умолчанию.