Пакеты в Golang

30 июля 2026
Автор

Александр Гольцман

Пакеты в Golang

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

Что такое пакет в Go?

В Go вся программа состоит из пакетов. Даже самый простой Go-код является частью какого-либо пакета. Пакеты позволяют разделять код на модули и управлять зависимостями между ними. В стандартной библиотеке Go уже есть множество встроенных пакетов, например, fmt для работы с форматированным выводом или net/http для работы с HTTP.

Пакеты - это основа организации кода в Go, но для эффективного использования этой системы необходимо понимать, как правильно структурировать свои проекты, как управлять зависимостями и как создавать переиспользуемый код. Если вы хотите детальнее погрузиться в экосистему Go и научиться создавать надежные и масштабируемые приложения, приходите на наш большой курс Основы Golang. На курсе 193 уроков и 16 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Каждый файл в Go начинается с объявления пакета:

package main

Здесь main — это особый пакет, с которого начинается выполнение программы. Если ваш код не предназначен для создания исполняемого файла, а, например, используется как библиотека, то он будет принадлежать другому пакету.

Курс по теме

Основы Golang — курс

40 000+ студентов · рейтинг 4.8 · гарантия возврата 30 дней

Создание собственного пакета

Смотрите, если вы хотите создать свой пакет, просто разместите нужные файлы в отдельной директории и укажите в них соответствующее имя пакета.

Структура проекта с пакетами

Вот простая структура проекта, в котором есть свой пакет:

my_project/
│── main.go
│── mathutil/
│   ├── mathutil.go

Файл mathutil.go содержит пакет mathutil:

package mathutil

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

А теперь в main.go мы можем использовать этот пакет:

package main

import (
    "fmt"
    "my_project/mathutil"
)

func main() {
    result := mathutil.Add(3, 5)
    fmt.Println("Результат:", result)
}

Здесь я импортировал пакет mathutil и использовал его функцию Add.

Встроенные пакеты в Go

Go поставляется с мощной стандартной библиотекой, которая включает множество полезных пакетов. Вот некоторые из них:

  • fmt — работа с форматированным выводом
  • strings — операции над строками
  • math — математические функции
  • net/http — работа с HTTP
  • os — взаимодействие с операционной системой

Вы можете использовать их, просто импортировав нужный пакет:

import "fmt"

Публичные и приватные элементы пакетов

В Go действует простое правило:

  • Если название идентификатора начинается с заглавной буквы, оно экспортируется и доступно из других пакетов.
  • Если название начинается со строчной буквы, оно остается приватным внутри пакета.

Пример:

package example

var PublicVar = 42   // Экспортируется
var privateVar = 10  // Не экспортируется

В другом пакете можно использовать PublicVar, но privateVar будет недоступен.

Заключение

Пакеты в Go помогают структурировать код и делают его удобным для поддержки и повторного использования. Мы разобрали, как объявлять и использовать пакеты, как организовать структуру проекта и как работают публичные и приватные элементы. Старайтесь правильно разбивать код на логические части, чтобы ваш проект оставался чистым и понятным.

Использование пакетов - это необходимый навык для любого Go разработчика. Чтобы создавать крупные и сложные проекты, вам потребуется понимание всех тонкостей и нюансов работы с пакетами. Вы сможете получить эти знания на нашем курсе Основы Golang. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Go прямо сегодня и станьте уверенным разработчиком.

Стрелочка влевоПаника и обработка ошибок в GolangИмпорт пакетов в GoСтрелочка вправо

Постройте личный план изучения Golang до уровня Middle — бесплатно!

Golang — часть карты развития Backend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Golang

Работа с YAML в GolangПреобразование типов в GolangКонвертация структур в JSON в GolangStrconv в GolangИспользование пакета SQLx для работы с базами данных в GolangРазбираемся с SQL в GolangРазделение строк с помощью функции split в GolangSort в GoПоиск и замена строк в Go - GolangИспользование пакета reflect в GolangРабота с PostgreSQL в GoPointers в GolangПарсинг в GoРабота со списками (list) в GolangПреобразование int в string в GolangРабота с числами с плавающей точкой в GolangРабота с полями в GolangИспользование enum в GolangОбработка JSON в GoЧтение и запись CSV-файлов в GolangРабота с cookie в GolangРегистры в GoКэширование данных в GolangПреобразование byte в string в GolangByte в GoИспользование bufio для работы с потоками данных в GolangДобавление данных и элементов (add) в Go
Логирование в Golang. Zap, Logrus, Loki, GrafanaРабота с Docker-контейнерами в GoИспользование pprof в GolangМеханизмы синхронизации в GolangРабота с пакетом S3 в GolangМониторинг Golang приложений с помощью PrometheusОптимизация проектов на GoПаттерны проектирования в GolangТрейсинг запросов с OpenTelemetry в GoНастройка шины событий NATS NSQ в GoМиграции базы данных в GolangНастройка уровней логирования log levels в GoОркестрация контейнеров Go с Kubernetes + DockerGjGo Playground и компилятор GolangИспользование go mod init для создания модулей GolangРабота с переменными окружения (env) в GolangКоманда go build в GolangАвтоматизация Golang проектов — CI/CD с GitLab CI и JenkinsРуководство по embed в GoОтладка кода в GolangЧтение и использование конфигурации в приложениях на GolangРабота с пакетом Amazon S3 в GolangКак развернуть Go-приложение на облаке AWSКомпиляция в GolangАутентификация в Golang
Сетевые протоколы в GoПеременные в GolangЗначения в GolangДженерик %T и его применение в GolangТипы данных в GolangИспользование tls в GolangИспользование tag в структурах GolangSwitch в GoСтроки в GolangРабота с потоками (stream) в GolangSelect в GoРуны в GoРабота с пакетом params в GolangКонвертация строк в числа в GolangNull, Nil, None, 0 в GoНаименования переменных, функций и структур в GoInt в GolangУстановка GolangЧтение и установка HTTP заголовков в GolangMethods в GolangGoLand — IDE для разработки на Golang от JetBrainsGo или Python для бэкенда: что выбрать и почемуОбработка «not found» в GolangFloat в GolangФлаги командной строки в Go (Golang)Запуск внешних команд в GolangОбработка ошибок в GoИспользование defer в GolangЗначения default в GolangГенерация кода в GoФорматирование кода в GolangЧистая архитектура в GolangКаналы (channels) в GolangПолучение body из HTTP запроса в Golang
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Основы Golang

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Nest.js с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.6
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажерыAI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий