Go Курс

Введение в язык программирования Go

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Введение в 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!

Создаём проект

  1. Создай на рабочем столе папку с названием myfirstapp.
  2. Открой VS Code и выбери "File" → "Open Folder" → укажи эту папку.
  3. Создай новый файл: нажми на иконку нового файла (или 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 — мощный и красивый язык, и ты уже на пути к тому, чтобы стать настоящим программистом!

Не забывай практиковаться. Как говорится, "теория без практики мертва". Пиши код каждый день, экспериментируй, ломай программы и чини их — это лучший способ научиться.

Удачи в программировании! 🚀