Введение в Go: Первый шаг в мир программирования
Привет, будущий программист! Сегодня мы начинаем увлекательное путешествие в мир языка Go (или Golang, как его часто называют). Представь, что ты учишься строить дома: сначала ты узнаёшь, какие бывают кирпичи, потом учишься их соединять, а затем создаёшь целые здания. Go — это такой же "строительный материал" для программ, только вместо кирпичей у нас команды, а вместо домов — приложения и игры.
Почему именно Go? Этот язык создали инженеры Google в 2009 году, чтобы программировать было просто, быстро и надёжно. Он как хороший конструктор LEGO: детали подходят друг к другу, всё понятно, и можно собрать что угодно — от маленькой программки до огромного сервера. Go используют такие гиганты, как Google, YouTube, Netflix, Twitch и даже твой любимый Discord!
В этом уроке мы научимся:
- Устанавливать Go на компьютер
- Писать первую программу
- Понимать, как работают переменные и типы данных
- Использовать функции для повторения кода
- Создавать простые программы с условиями
Установка Go и настройка рабочего места
Прежде чем писать код, нам нужно установить Go на компьютер. Это как подготовить инструменты перед тем, как начать строить.
Шаг 1: Скачивание Go
Зайди на официальный сайт golang.org/dl/ и скачай версию для своей операционной системы (Windows, macOS или Linux). Выбирай последнюю стабильную версию — она будет самой свежей и удобной.
Шаг 2: Установка
- Windows: Запусти скачанный .msi файл и следуй инструкциям установщика. По умолчанию Go установится в папку
C:\Go. - macOS: Открой .pkg файл и нажми "Установить". Всё просто.
- Linux: Распакуй архив в
/usr/localи добавь Go в PATH (обычно установщик делает это сам).
Шаг 3: Проверка установки
Открой терминал (Command Prompt на Windows или Terminal на macOS/Linux) и введи команду:
go version
Если ты видишь что-то вроде go version go1.21.0 windows/amd64 — всё работает! Если нет — проверь, что путь к Go добавлен в переменные окружения (обычно установщик делает это автоматически).
Шаг 4: Выбор редактора кода
Чтобы писать код, нужен редактор. Советую Visual Studio Code (VS Code) — он бесплатный, удобный и с поддержкой Go. Скачай его с code.visualstudio.com. После установки открой VS Code, нажми на иконку расширений слева (или Ctrl+Shift+X) и найди расширение "Go" от Microsoft — установи его. Это добавит подсветку кода, подсказки и автоматическую проверку ошибок.
Твоя первая программа: "Привет, мир!"
В программировании есть традиция: первая программа всегда выводит на экран "Hello, World!". Это как первый рисунок в художественной школе — простой, но важный шаг. Давай напишем её на Go!
Создаём проект
- Создай на рабочем столе папку с названием
myfirstapp. - Открой VS Code и выбери "File" → "Open Folder" → укажи эту папку.
- Создай новый файл: нажми на иконку нового файла (или Ctrl+N) и сохрани его как
main.go(расширение .go обязательно!).
Пишем код
// Каждая программа на Go начинается с объявления пакета
// Пакет main — это специальный пакет, с которого начинается выполнение
package main
// Import — это как список инструментов, которые мы хотим использовать
// fmt — это стандартный пакет для работы с текстом и выводом
import "fmt"
// func main() — это главная функция, с которой начинается программа
// Всё, что внутри фигурных скобок { }, выполняется по порядку
func main() {
// Выводим текст на экран
// fmt.Println() печатает строку и переводит курсор на новую строку
fmt.Println("Привет, мир!")
fmt.Println("Я изучаю Go!")
}
Запускаем программу
Открой терминал в VS Code (Вид → Терминал или Ctrl+`). Убедись, что ты находишься в папке myfirstapp. Введи команду:
go run main.go
Если всё правильно, ты увидишь:
Привет, мир!
Я изучаю Go!
Поздравляю! Ты только что написал и запустил свою первую программу на Go!
Разбор кода по частям
- package main — каждая программа на Go состоит из пакетов. Пакет main — особенный: он говорит компилятору, что это исполняемая программа, а не библиотека.
- import "fmt" — мы подключаем пакет fmt (от слова "format"). Он содержит функции для работы с текстом, например, Println для печати.
- func main() { ... } — это функция. Функция — это блок кода, который можно вызывать. main — главная функция, с неё всё начинается.
- fmt.Println() — вызов функции Println из пакета fmt. Она принимает текст в кавычках и выводит его на экран.
Переменные: как хранить информацию
Представь, что ты играешь в компьютерную игру. У тебя есть количество жизней, очки, имя персонажа. Всё это — данные, которые нужно где-то хранить. В программировании для этого служат переменные. Это как коробки с наклейками: на коробке написано имя (например, "жизни"), а внутри лежит значение (например, 3).
Типы данных
В Go у каждой коробки есть тип — то, что можно в неё положить. Нельзя положить текст в коробку для чисел, иначе программа сломается. Вот основные типы:
- int — целые числа (1, -5, 1000)
- float64 — дробные числа (3.14, -0.5, 2.0)
- string — текст ("Привет", "Go", "123")
- bool — логические значения (true или false)
Как создать переменную
Есть два способа:
// Способ 1: полное объявление (тип указываем явно)
var age int = 15
var name string = "Анна"
var height float64 = 1.65
var isStudent bool = true
// Способ 2: короткое объявление (Go сам догадается о типе)
age := 15 // Go поймёт, что это int
name := "Анна" // Go поймёт, что это string
height := 1.65 // Go поймёт, что это float64
isStudent := true // Go поймёт, что это bool
Второй способ короче, и его используют чаще всего. Обрати внимание на := — это оператор присваивания с автоматическим определением типа.
Пример с переменными
package main
import "fmt"
func main() {
// Объявляем переменные
playerName := "Максим"
playerLevel := 5
playerScore := 1250.5
isPlaying := true
// Выводим информацию об игроке
fmt.Println("Имя игрока:", playerName)
fmt.Println("Уровень:", playerLevel)
fmt.Println("Очки:", playerScore)
fmt.Println("В игре?", isPlaying)
// Меняем значение переменной
playerLevel = 6
fmt.Println("Новый уровень:", playerLevel)
}
Запусти эту программу и посмотри, что получится. Обрати внимание: когда мы меняем значение переменной (playerLevel = 6), мы не используем :=, потому что переменная уже существует.
Функции: повторное использование кода
Функции — это как рецепты. Если ты хочешь испечь пирог, ты не объясняешь каждый раз заново, как смешивать муку и яйца — ты просто говоришь "испеки пирог". В программировании функции позволяют один раз написать код и вызывать его много раз.
Ты уже видел функцию main и функцию fmt.Println. Теперь научимся создавать свои собственные функции.
Структура функции
// func — ключевое слово для объявления функции
// имяФункции — как мы будем её называть
// (параметры) — входные данные (могут быть пустыми)
// возвращаемыйТип — что функция отдаёт (может отсутствовать)
func имяФункции(параметры) возвращаемыйТип {
// тело функции — код, который выполняется
return результат // если функция что-то возвращает
}
Примеры функций
package main
import "fmt"
// Функция, которая не принимает параметры и ничего не возвращает
func sayHello() {
fmt.Println("Привет!")
}
// Функция, которая принимает имя и приветствует
func greet(name string) {
fmt.Println("Привет,", name)
}
// Функция, которая складывает два числа и возвращает результат
func add(a int, b int) int {
result := a + b
return result
}
// Функция, которая возвращает несколько значений
func divide(a, b float64) (float64, string) {
if b == 0 {
return 0, "Ошибка: деление на ноль"
}
return a / b, ""
}
func main() {
// Вызываем функции
sayHello()
greet("Анна")
greet("Максим")
sum := add(10, 20)
fmt.Println("Сумма:", sum)
result, err := divide(10, 3)
if err != "" {
fmt.Println("Ошибка:", err)
} else {
fmt.Println("Результат деления:", result)
}
}
Обрати внимание на функцию divide: она возвращает два значения — результат и сообщение об ошибке. Это удобно: если что-то пошло не так, мы можем обработать ошибку.
Условные операторы: если... то...
В жизни мы постоянно принимаем решения: "Если идёт дождь, возьми зонт", "Если получил пятёрку, куплю мороженое". В программировании для этого служат условные операторы if и else.
Базовый синтаксис
if условие {
// код, который выполняется, если условие истинно (true)
} else {
// код, который выполняется, если условие ложно (false)
}
Операторы сравнения
- == — равно
- != — не равно
- < — меньше
- > — больше
- <= — меньше или равно
- >= — больше или равно
Пример с оценками
package main
import "fmt"
func main() {
// Симулируем проверку оценки
score := 85
if score >= 90 {
fmt.Println("Отлично! Ты получил пятёрку!")
} else if score >= 75 {
fmt.Println("Хорошо! Четвёрка!")
} else if score >= 50 {
fmt.Println("Неплохо, но можно лучше. Тройка.")
} else {
fmt.Println("Нужно подтянуть знания. Двойка.")
}
// Пример с логическими операторами
age := 16
hasPermission := true
if age >= 18 && hasPermission {
fmt.Println("Доступ разрешён")
} else {
fmt.Println("Доступ запрещён")
}
// Логические операторы: && (И), || (ИЛИ), ! (НЕ)
isWeekend := false
isHoliday := true
if isWeekend || isHoliday {
fmt.Println("Можно отдыхать!")
}
}
Игра "Угадай число"
Давай напишем простую игру, где компьютер загадывает число, а пользователь пытается его угадать:
package main
import "fmt"
func main() {
// Загадываем число (пока просто задаём его в коде)
secretNumber := 7
fmt.Println("Я загадал число от 1 до 10. Попробуй угадать!")
// Вводим число с клавиатуры
var guess int
fmt.Print("Твой вариант: ")
fmt.Scan(&guess) // Считываем число, которое ввёл пользователь
// Проверяем
if guess == secretNumber {
fmt.Println("Ура! Ты угадал!")
} else if guess < secretNumber {
fmt.Println("Нет, моё число больше. Попробуй ещё раз.")
} else {
fmt.Println("Нет, моё число меньше. Попробуй ещё раз.")
}
}
Функция fmt.Scan(&guess) считывает ввод пользователя. Знак & означает, что мы передаём адрес переменной, куда нужно записать значение. Пока просто запомни этот синтаксис.
Циклы: повторение — мать учения
Циклы позволяют выполнять один и тот же код много раз. Это как если бы ты попросил робота: "Повторяй 10 раз: подними руку, опусти руку". В Go есть только один вид цикла — for, но он умеет делать всё, что нужно.
Цикл со счётчиком
// Выводим числа от 1 до 5
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
// Разбор:
// i := 1 — начальное значение счётчика
// i <= 5 — условие продолжения
// i++ — увеличиваем счётчик на 1 (i++ это то же самое, что i = i + 1)
Цикл с условием (как while в других языках)
// Играем, пока не надоест
playAgain := true
attempts := 0
for playAgain {
fmt.Println("Играем...")
attempts++
if attempts >= 3 {
playAgain = false
}
}
fmt.Println("Игра окончена. Сыграно", attempts, "раз(а)")
Бесконечный цикл и break
// Бесконечный цикл, пока не введём правильный пароль
password := "secret123"
var input string
for {
fmt.Print("Введите пароль: ")
fmt.Scan(&input)
if input == password {
fmt.Println("Доступ разрешён!")
break // выходим из цикла
} else {
fmt.Println("Неверный пароль. Попробуйте ещё раз.")
}
}
Практические задания
Теперь твоя очередь! Попробуй выполнить эти задания самостоятельно. Если что-то не получается — перечитай урок, поищи ошибки в коде или попроси помощи у друга-программиста.
Задание 1: Калькулятор возраста
Напиши программу, которая:
- Спрашивает у пользователя год рождения
- Вычисляет его возраст в 2024 году
- Выводит: "Тебе X лет"
- Если возраст больше 18, выводит "Ты совершеннолетний", иначе — "Ты несовершеннолетний"
Подсказка: используй fmt.Scan() для ввода и переменные типа int.
Задание 2: Таблица умножения
Создай функцию printMultiplicationTable(number int), которая выводит таблицу умножения для заданного числа от 1 до 10. Например, для числа 5:
5 x 1 = 5
5 x 2 = 10
...
5 x 10 = 50
Подсказка: используй цикл for и форматированный вывод. Чтобы вывести число и текст вместе, можно использовать fmt.Printf("%d x %d = %d\n", number, i, number*i).
Задание 3: Игра "Камень, ножницы, бумага"
Напиши простую версию игры:
- Компьютер "загадывает" один из трёх вариантов: камень (1), ножницы (2), бумага (3). Просто задай случайное число в коде (можно использовать
rand.Intn(3) + 1, но для этого нужно импортировать пакеты "math/rand" и "time"). - Пользователь вводит свой вариант (1, 2 или 3).
- Программа определяет победителя по правилам: камень бьёт ножницы, ножницы бьют бумагу, бумага бьёт камень.
- Выводит результат: "Ты выиграл!", "Компьютер выиграл!" или "Ничья!".
Подсказка для случайного числа:
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) // Инициализация генератора случайных чисел
computerChoice := rand.Intn(3) + 1 // Число от 1 до 3
}
Заключение
Сегодня ты сделал первые шаги в мире Go! Ты узнал:
- Как устанавливать Go и писать программы
- Что такое переменные и как их использовать
- Как создавать функции и повторно использовать код
- Как принимать решения с помощью if/else
- Как повторять действия с помощью циклов
Это только начало. В следующих уроках мы научимся работать с массивами, создавать свои типы данных, читать файлы и даже писать веб-серверы. Go — мощный и красивый язык, и ты уже на пути к тому, чтобы стать настоящим программистом!
Не забывай практиковаться. Как говорится, "теория без практики мертва". Пиши код каждый день, экспериментируй, ломай программы и чини их — это лучший способ научиться.
Удачи в программировании! 🚀