Пакеты и модули: организация кода, видимость
Вопрос
Как организована система пакетов в Go? Какие правила видимости существуют? Что такое Go modules и как они работают?
Ответ
Пакеты: - Единица компиляции и инкапсуляции - Все файлы в директории - один пакет - Имена с заглавной буквы - экспортируемые (public) - Имена со строчной буквы - приватные (package-scope) Go Modules: - Система управления зависимостями (с Go 1.11) - go.mod файл описывает модуль и зависимости - Семантическое версионирование - Proxy для загрузки модулей
// go.mod
module example.com/myproject
go 1.21
require (
github.com/gorilla/mux v1.8.0
)
// internal package - доступен только из родительского модуля
myproject/
├── go.mod
├── main.go
├── internal/
│ └── database/
│ └── db.go
└── api/
└── handlers.go
// go.mod
module example.com/myproject
go 1.21
require (
github.com/gorilla/mux v1.8.0
)
// internal package - доступен только из родительского модуля
myproject/
├── go.mod
├── main.go
├── internal/
│ └── database/
│ └── db.go
└── api/
└── handlers.go
Дополнительные вопросы
Что такое vendor директория? Как работает module proxy?