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

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

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

Начать курс

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

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

Пакет fmt: форматированный ввод/вывод

Это первый пакет, с которым знакомится каждый разработчик Go. Он предоставляет функции для форматированного вывода в консоль и чтения данных.

package main

import "fmt"

func main() {
    name := "Go"
    version := 1.22
    // Форматированный вывод
    fmt.Printf("Язык: %s, Версия: %.1f\n", name, version)

    // Сбор строки без вывода
    message := fmt.Sprintf("Привет, %s!", name)
    fmt.Println(message)
}

Пакет strings и strconv: работа со строками

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

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

func main() {
    s := "Привет, мир!"
    // Поиск подстроки
    if strings.Contains(s, "мир") {
        fmt.Println("Найдено")
    }
    // Разделение строки
    parts := strings.Split(s, ", ")
    fmt.Println(parts[0]) // Привет

    // Преобразование строки в число
    num, _ := strconv.Atoi("42")
    fmt.Println(num + 8) // 50
}

Пакет net/http: создание HTTP-серверов и клиентов

Один из самых мощных пакетов. Позволяет за несколько строк кода запустить полноценный HTTP-сервер. Широко используется в микросервисах и веб-приложениях.

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Привет, %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

Пакет encoding/json: работа с JSON

Современные приложения постоянно обмениваются данными в формате JSON. Пакет encoding/json позволяет легко сериализовать и десериализовать структуры Go в JSON и обратно.

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    user := User{Name: "Алексей", Age: 30}
    // Сериализация в JSON
    jsonData, _ := json.Marshal(user)
    fmt.Println(string(jsonData)) // {"name":"Алексей","age":30}

    // Десериализация из JSON
    var decoded User
    json.Unmarshal(jsonData, &decoded)
    fmt.Println(decoded.Name) // Алексей
}

Пакет io и os: работа с файлами и потоками

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

import (
    "io/ioutil"
    "os"
)

func main() {
    // Запись в файл
    data := []byte("Hello, Go!")
    ioutil.WriteFile("example.txt", data, 0644)

    // Чтение из файла
    content, _ := ioutil.ReadFile("example.txt")
    os.Stdout.Write(content)
}

Пакет sync и goroutines: конкурентность

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

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Уменьшаем счётчик при завершении
    fmt.Printf("Worker %d начал\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Worker %d закончил\n", id)
}

func main() {
    var wg sync.WaitGroup
    for i := 1; i <= 3;                    

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