Пакеты Go
Из этой темы ты узнаешь:
-
что такое пакеты и каких типов они бывают;
-
как создавать и импортировать пакеты;
-
из каких шагов состоит инициализация.
Что такое пакет
Пакет — это папка с набором файлов go. Каждый файл go должен быть частью некоторого пакета.
Пакеты в Go должны быть маленькими и многочисленными.
- Старайся, чтобы структура каталогов была как можно более плоской. То есть не вкладывай пакеты внутрь пакетов (не всегда используется на практике).
Типы пакетов
-
Исполняемые пакеты:
-
В них генерируются исполняемые файлы, которые можно запустить.
-
Имя исполняемого пакета предопределено и называется main
-
Этот пакет должен иметь функцию с именем main.
-
Функция main сообщает go, с чего начать выполнение кода.
-
Она не принимает никаких входных параметров и ничего не возвращает.
-
Неисполняемые пакеты:
-
Библиотеки или зависимости, которые используются другими пакетами. Пример — fmt
-
Они могут иметь любое имя.
-
Их нельзя выполнить как исполняемый пакет, только импортировать.
-
Все пакеты, кроме main, являются неисполняемыми пакетами.
Файл, который является частью main пакета и содержит main функцию, может не называться main.go
Создание и импорт пакетов
Все файлы в каталоге должны принадлежать одному и тому же пакету. |
|
Идиоматично использовать простое и короткое имя для пакетов, например, time, http, список, а также не рекомендуется использовать «_»,хотя он очень часто используется в больших проектах, а также camelCase в названиях пакетов.
Обычное соглашение состоит в том, чтобы имя папки совпадало с именем пакета.
Другие пакеты могут использовать только имена функций/переменных, начинающиеся с прописной буквы (считающиеся общедоступными). |
Если имена функций/переменных написаны строчными буквами, они будут считаться приватными (private) и не будут экспортированы. То есть будут недоступны во внешних пакетах, доступ будет осуществляться на уровне пакета (каталога, папки), в котором они находятся. |
-
Имей в виду, что при импорте пакета мы импортируем весь каталог. Таким же образом произойдет оптимизация во время компиляции, неиспользуемый функционал пакета не будет присутствовать в исполняемом файле.
-
Обычно исходный файл называют так же, как и каталог пакета. Это не обязательно.
-
Пакет все равно будет импортирован таким же образом, поскольку мы импортируем весь каталог, то есть все файлы в папке, а не один файл go.
-
Области видимости в Go
-
На уровне пакета ты можешь использовать переменные в других файлах, принадлежащих тому же пакету, без необходимости их экспорта (в верхнем регистре).
-
import операторы относятся к области файла и видны только в этом файле.
-
Поэтому, если ты хочешь использовать пакет, например fmt в нескольких файлах, его следует импортировать во все файлы, где используется функционал пакета fmt.
Пакет может содержать один файл.
Использование пакетов до модулей
Программисты Go обычно хранят весь свой код Go в одном рабочем пространстве.
-
Это было строгим требованием до версии 1.13, выпущенной в 2019 году.
-
После этой версии было предоставлено больше гибкости в отношении того, где ты можешь хранить исходный код.
-
Рабочая область — это не что иное, как каталог в твоей файловой системе, путь к которому хранится в переменной среде с именем GOPATH.
-
В Windows это %USERPROFILE%\go, Например, C:\Users\ad\go.
-
На Mac и Linux это ~/go, например, /Users/john/go или /home/john/go.
-
Ты можешь распечатать значения переменных среды, выполнив команду go env.
- go env | grep -i gopath
-
Для управления зависимостями ранее использовались сторонние инструменты, что было не очень удобно.