Go с нуля в 2025: практическое руководство для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение в Go: с чего начать в 2025 году: на практике

Go (или Golang) — это компилируемый, статически типизированный язык программирования, разработанный в Google. В 2025 году он прочно занимает нишу высокопроизводительных микросервисов, облачных приложений и DevOps-инструментов. Если вы хотите начать изучать Go с практической точки зрения, это руководство проведет вас от установки до написания первой осмысленной программы.

Почему Go? Он сочетает простоту Python с производительностью C. Go идеален для создания надежных серверных приложений, сетевых утилит и параллельных вычислений благодаря встроенной поддержке горутин (goroutines). В этой статье мы разберем ключевые концепции на примерах кода, которые вы сможете сразу запустить.

1. Установка и настройка окружения

Первым шагом является установка компилятора Go. В 2025 году актуальной стабильной версией является Go 1.22 или 1.23. Установка проста:

  • Windows: Скачайте MSI-установщик с официального сайта и запустите его.
  • macOS: Используйте Homebrew: brew install go.
  • Linux: Скачайте архив .tar.gz и распакуйте его в /usr/local или используйте менеджер пакетов (например, sudo apt install golang-go).

После установки проверьте версию в терминале:

go version

Вы должны увидеть что-то вроде go version go1.22.0 linux/amd64. Теперь создайте рабочее пространство (workspace). В Go принято хранить все проекты в одной папке. Создайте папку go-projects и внутри нее папку для первого проекта:

mkdir -p ~/go-projects/hello
cd ~/go-projects/hello

Инициализируйте модуль — это основная единица управления зависимостями:

go mod init hello

Эта команда создаст файл go.mod, который будет отслеживать зависимости вашего проекта.

2. Синтаксис: переменные, типы и управляющие конструкции

Go имеет строгую, но лаконичную систему типов. Давайте создадим файл main.go и напишем базовый пример:

package main

import "fmt"

func main() {
    // Объявление переменных
    var name string = "Go"
    var version int = 2025
    isFast := true // короткое объявление (тип выводится автоматически)

    fmt.Println("Привет,", name)
    fmt.Println("Версия:", version)
    fmt.Println("Go быстрый?", isFast)

    // Условный оператор
    if version > 2024 {
        fmt.Println("Это актуальная версия!")
    }

    // Цикл for (единственный цикл в Go)
    for i := 0; i < 3; i++ {
        fmt.Printf("Итерация %d\n", i)
    }
}

Ключевые моменты:

  • package main — указывает, что это исполняемая программа.
  • import "fmt" — импорт пакета для форматированного ввода/вывода.
  • var и := — два способа объявления переменных. := используется только внутри функций.
  • Типы: string, int, bool, float64 и другие.

Запустите программу командой go run main.go. Вы должны увидеть вывод в консоли.

3. Функции и структуры: основа модульности

Функции в Go объявляются с помощью ключевого слова func. Они могут возвращать несколько значений — это одна из ключевых фич языка. Структуры (struct) — это аналоги классов в ООП, но без наследования.

package main

import "fmt"

// Структура для представления пользователя
type User struct {
    Name string
    Age  int
}

// Функция, возвращающая несколько значений
func createUser(name string, age int) (User, error) {
    if age < 0 {
        return User{}, fmt.Errorf("возраст не может быть отрицательным")
    }
    return User{Name: name, Age: age}, nil
}

// Метод для структуры User
func (u User) greet() string {
    return fmt.Sprintf("Привет, меня зовут %s и мне %d лет", u.Name, u.Age)
}

func main() {
    user, err := createUser("Алексей", 30)
    if err != nil {
        fmt.Println("Ошибка:", err)
        return
    }

    fmt.Println(user.greet())

    // Анонимная функция
    double := func(x int) int {
        return x * 2
    }
    fmt.Println("Удвоенное значение:", double(5))
}

Важные концепции:

  • Множественный возврат: (User, error) — стандартный паттерн обработки ошибок в Go. Если ошибки нет, возвращается nil.
  • Методы: Функция с ресивером (u User) — это метод, который может быть вызван на экземпляре структуры.
  • Ошибки: Встроенный интерфейс error используется повсеместно. Не игнорируйте ошибки!

4. Первый практический проект: HTTP-сервер

Go славится своей стандартной библиотекой. Напишем простой веб-сервер, который принимает GET-запросы и возвращает JSON. Это основа для любого микросервиса.

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

// Структура ответа
type Response struct {
    Message string `json:"message"`
    Year    int    `json:"year"`
}

// Обработчик запросов
func helloHandler(w http.ResponseWriter, r *http.Request) {
    // Устанавливаем заголовок Content-Type
    w.Header().Set("Content-Type", "application/json")

    resp := Response{
        Message: "Добро пожаловать в Go!",
        Year:    2025,
    }

    // Кодируем структуру в JSON и отправляем
    err := json.NewEncoder(w).Encode(resp)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

func main() {
    // Регистрируем обработчик для пути "/"                

Блоги

Рекомендаций по книгам