🐹 Go

Введение в Go: история, особенности, применение в Go

Что это и зачем?

Представь, что ты строишь дом из кубиков Lego. Есть кубики, которые просто ставятся друг на друга — это как простой язык программирования. А есть кубики, которые ещё и крепко сцепляются, чтобы дом не развалился, даже если на него упадет мяч. Go (или Golang) — это такой "супер-крепкий Lego" для программистов. Его придумали в компании Google в 2009 году, потому что программистам надоело ждать, пока их программы долго запускаются или ломаются при большой нагрузке.

Зачем тебе знать Go? Представь, что ты пишешь программу для онлайн-игры, где одновременно играют миллион человек. На Python или JavaScript такая программа может начать "тормозить" или упасть. Go же создан, чтобы работать быстро и надёжно, как швейцарские часы. Его используют в больших проектах: Docker (программа для запуска приложений), Kubernetes (система для управления программами), а также в серверах Telegram и YouTube. Если ты хочешь стать крутым разработчиком, который умеет делать быстрые и мощные программы — Go твой выбор.

Синтаксис и примеры кода

Go выглядит строго, но логично. Давай разберём несколько примеров. Не пугайся — я объясню каждую строчку!

Пример 1: Привет, мир!

package main // 1. Говорим, что это главная программа

import "fmt" // 2. Берём библиотеку для вывода текста

func main() { // 3. Главная функция, с неё всё начинается
    fmt.Println("Привет, мир!") // 4. Печатаем текст
}

Комментарии:

  • package main — каждая программа на Go начинается с указания "пакета". main — это как "главный вход" в программу.
  • import "fmt" — мы подключаем готовый набор инструментов (библиотеку) для работы с текстом. fmt — это сокращение от "format".
  • func main() — функция, которая запускается первой. Внутри неё пишем команды.
  • fmt.Println(...) — команда "напечатай строку и перейди на новую строку". Всё, что в кавычках, появится на экране.

Пример 2: Переменные и математика

package main

import "fmt"

func main() {
    // Объявляем переменные
    var age int = 14          // age — целое число (int)
    var name string = "Аня"   // name — строка (string)
    var height float64 = 1.65 // height — дробное число (float64)

    // Считаем возраст через 5 лет
    futureAge := age + 5 // := — короткая запись для новых переменных

    // Выводим результат
    fmt.Println("Привет,", name)
    fmt.Println("Тебе сейчас", age, "лет")
    fmt.Println("Через 5 лет тебе будет", futureAge)
    fmt.Println("Твой рост:", height, "м")
}

Комментарии:

  • var age int = 14 — создаём переменную age типа int (целое число) и кладём туда 14.
  • futureAge := age + 5 — короткий способ создать переменную. Go сам догадается, что futureAge тоже целое число.
  • fmt.Println умеет печатать сразу несколько штук через запятую.

Пример 3: Условия (if-else)

package main

import "fmt"

func main() {
    var age int = 16

    if age >= 18 { // Если age больше или равно 18
        fmt.Println("Ты взрослый!")
    } else if age >= 12 { // Иначе если age >= 12
        fmt.Println("Ты подросток!")
    } else { // Иначе (все остальные случаи)
        fmt.Println("Ты ребёнок!")
    }
}

Комментарии:

  • if — проверяет условие. Если оно истинно (правда), выполняется код внутри фигурных скобок {}.
  • else if — ещё одна проверка, если первая не сработала.
  • else — выполняется, если ни одно условие не подошло.
  • Обрати внимание: в Go нет круглых скобок вокруг условия (как в Python), но фигурные скобки обязательны!

Пример 4: Цикл (for)

package main

import "fmt"

func main() {
    // Считаем от 1 до 5
    for i := 1; i <= 5; i++ {
        fmt.Println("Счёт:", i)
    }

    // Бесконечный цикл (остановится, когда i станет 10)
    i := 0
    for {
        i++
        if i == 10 {
            break // выходим из цикла
        }
    }
    fmt.Println("Цикл закончен, i =", i)
}

Комментарии:

  • for i := 1; i <= 5; i++ — три части: начальное значение (i=1), условие (пока i <= 5), шаг (увеличить i на 1).
  • i++ — сокращение для i = i + 1.
  • break — команда "стоп, выходи из цикла".
  • В Go нет цикла while, как в Python. Вместо него используют for с одним условием.

Пример 5: Функции

package main

import "fmt"

// Функция, которая складывает два числа
func add(a int, b int) int {
    return a + b // возвращаем результат
}

func main() {
    result := add(5, 3) // вызываем функцию
    fmt.Println("5 + 3 =", result)

    // Можно вызвать несколько раз
    fmt.Println("10 + 20 =", add(10, 20))
}

Комментарии:

  • func add(a int, b int) int — объявляем функцию с именем add. Она принимает два целых числа (a и b) и возвращает целое число (последний int).
  • return a + b — возвращаем сумму.
  • Функции помогают не писать один и тот же код много раз.

Сравнение с Python

Python — это как "разговорный язык": на нём легко и быстро писать, но он может быть медленным. Go — как "официальный документ": строгий, но быстрый и надёжный. Давай сравним:

Идея Python Go
Привет, мир print("Привет") fmt.Println("Привет")
Переменная age = 14 var age int = 14 или age := 14
Условие if age >= 18: if age >= 18 {
Цикл for i in range(5): for i := 0; i < 5; i++ {
Функция def add(a, b): func add(a int, b int) int {

Главные отличия:

  • Типы: В Python ты пишешь age = 14, и Python сам понимает, что это число. В Go нужно явно указывать тип (int, string и т.д.). Это кажется сложным, но зато программа работает быстрее и реже ошибается.
  • Скобки: В Python условия и циклы заканчиваются двоеточием, а блоки кода выделяются отступами. В Go — фигурные скобки {}. Отступы не важны (но их всё равно ставят для красоты).
  • Скорость: Go компилируется (превращается в машинный код) сразу, а Python интерпретируется (читается строка за строкой). Поэтому Go работает в 10-100 раз быстрее.

Типичные ошибки новичков

Даже опытные программисты иногда путаются в Go. Вот что чаще всего ловит новичков:

  1. Забыл указать тип или имя переменной. Например, написал var = 5 вместо var x int = 5. Go скажет: "Ошибка! Я не знаю, что это за переменная".
  2. Неиспользуемые переменные. Если ты объявил переменную, но нигде её не использовал, Go откажется запускать программу. Это сделано, чтобы код был чистым. Решение: либо используй переменную, либо удали её.
  3. Путаница с = и :=. = — присвоить значение уже существующей переменной. := — создать новую переменную. Если написать age := 14 дважды, будет ошибка.
  4. Забыл фигурные скобки. В Go нельзя писать if x > 5 без {}. Даже если внутри одна команда, скобки обязательны.
  5. Неправильный импорт. Если ты подключил "fmt", но не используешь его — ошибка. Если используешь fmt.Println, но не импортировал — тоже ошибка.
  6. Путаница с типами. Нельзя сложить int и float64 без преобразования. Например, var a int = 5; var b float64 = 2.5; fmt.Println(a + b) — ошибка. Н