Стандартная библиотека 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; Также в библиотеке
Отправка email на Go: полное руководство по библиотекам и инструментам
Работа с Kafka в Java: библиотеки, настройка и примеры кода
Реактивное программирование в Swift: Combine и RxSwift для iOS/macOS
Zod для TypeScript: полное руководство с примерами
Работа с датами в Kotlin: библиотеки и инструменты (Kotlinx-datetime, Joda-Time, java.time)