Стандартная библиотека Go (Golang): полный обзор

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

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

Начать курс

Стандартная библиотека Go (Golang): полный обзор

Язык Go (Golang), разработанный в Google, славится своей лаконичностью, высокой производительностью и встроенной поддержкой конкурентности. Однако одной из главных его "суперсил" является мощная и продуманная стандартная библиотека. В отличие от многих других языков, где для решения базовых задач необходимо подключать сторонние зависимости, Go предоставляет всё необходимое "из коробки". В этой статье мы проведём полный обзор ключевых пакетов стандартной библиотеки Go, которые пригодятся каждому разработчику.

1. Ввод-вывод и работа с файлами: пакеты io, os, bufio

Пакет io — это фундамент для всех операций ввода-вывода. Его интерфейсы io.Reader и io.Writer являются одними из самых важных абстракций в Go. Фактически, любой источник данных (файл, сетевое соединение, строка) может быть представлен как Reader, а любой приёмник — как Writer.

Пакет os предоставляет функции для взаимодействия с операционной системой: открытие/создание файлов, чтение директорий, работа с переменными окружения.

Пакет bufio добавляет буферизацию, что значительно ускоряет чтение и запись больших объёмов данных.

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    // Открываем файл для чтения
    file, err := os.Open("example.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    // Создаём буферизованный сканер
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "Ошибка чтения:", err)
    }
}

2. Работа с текстом и форматирование: пакеты strings, fmt, strconv

Пакет strings содержит сотни полезных функций для работы со строками: поиск, замена, разбиение, объединение, удаление пробелов и многое другое. Пакет strconv отвечает за преобразование строк в числа (и обратно), а также парсинг булевых значений.

Пакет fmt — это "швейцарский нож" для форматированного вывода. Он реализует функции Printf, Sprintf и Fprintf, которые работают с любыми типами, реализующими интерфейс Stringer.

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    // Разделение строки
    parts := strings.Split("a,b,c", ",")
    fmt.Println(parts) // [a b c]

    // Преобразование строки в число
    num, _ := strconv.Atoi("42")
    fmt.Printf("Число: %d\n", num) // Число: 42

    // Форматирование с шириной поля
    fmt.Printf("|%10s|%5d|\n", "Привет", 123)
}

3. Сеть и HTTP: пакеты net, net/http

Пакет net предоставляет низкоуровневые примитивы для работы с TCP/UDP, DNS и IP-адресами. Но настоящей "звездой" является пакет net/http. Он позволяет создавать полноценные HTTP-серверы и клиенты без единой сторонней зависимости.

Благодаря встроенному http.ServerMux и middleware-подходу, вы можете легко маршрутизировать запросы, обрабатывать JSON, управлять куками и сессиями. Стандартная библиотека Go используется в production такими гигантами, как Docker, Kubernetes и Dropbox.

package main

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

type Response struct {
    Message string `json:"message"`
}

func helloHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodGet {
        http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed)
        return
    }

    resp := Response{Message: "Привет, мир!"}
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(resp)
}

func main() {
    http.HandleFunc("/api/hello", helloHandler)
    fmt.Println("Сервер запущен на :8080")
    http.ListenAndServe(":8080", nil)
}

4. Конкурентность: пакеты sync, context

Go известен своей лёгкой моделью конкурентности на основе горутин (goroutines) и каналов (channels). Пакет sync предоставляет классические примитивы синхронизации: Mutex, RWMutex, WaitGroup и Once.

Пакет context — это стандартный способ управления временем жизни гор

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