Пакеты и видимость
Как Go организует код в пакеты и почему регистр первой буквы решает, что видно снаружи.
В Go видимость определяется регистром: имя с Заглавной буквы экспортируется (видно из других пакетов), со строчной — приватно для своего пакета.
Что такое пакет
Пакет — это набор файлов в одной папке с общим именем пакета в первой строке. Код внутри пакета видит все свои объявления независимо от того, в каком файле они лежат. Пакеты — основная единица переиспользования: стандартная библиотека и сторонние модули поставляются именно пакетами.
Экспорт через заглавную букву
В Go нет ключевых слов public и private. Вместо них — простое правило: Заглавная первая буква = экспорт. Это касается функций, типов, полей структур, констант и переменных.
// файл mathx/mathx.go
package mathx
// Square экспортирована — видна снаружи (заглавная S).
func Square(x int) int {
return x * x
}
// helper приватна — только внутри пакета mathx (строчная h).
func helper() int {
return 42
}// файл main.go
package main
import (
"fmt"
"example.com/myapp/mathx"
)
func main() {
fmt.Println(mathx.Square(5)) // OK
// mathx.helper() // ОШИБКА: не экспортирована
}Вывод:
25
К экспортированному имени обращаются через имя пакета: mathx.Square, fmt.Println, strings.ToUpper. Поэтому имена пакетов делают короткими и в нижнем регистре.
Импорты
Несколько импортов оформляют блоком в скобках. gofmt сам сортирует их и группирует. Можно дать пакету псевдоним, если имена конфликтуют.
import (
"fmt"
"strings"
r "math/rand" // псевдоним: обращаемся как r.Intn
)Документация пакета
Комментарий прямо над объявлением — это и есть документация. Инструмент go doc и сайт pkg.go.dev собирают её автоматически. По соглашению комментарий начинается с имени того, что описывает: // Square возвращает квадрат числа.
| Имя | Видимость |
Square, User, MaxSize | экспортируется |
helper, user, maxSize | приватно для пакета |
Итог
- Пакет — это папка с файлами, объявляющими одно имя пакета.
- Заглавная первая буква экспортирует имя, строчная делает его приватным.
- К экспортированному обращаются через
пакет.Имя; комментарий над объявлением — это документация.