Объявление пакета package
Объявление пакета package является обязательным элементом каждого исходного файла в Go. Оно определяет, к какому пакету принадлежит файл, и должно быть первой строкой кода (за исключением комментариев). Пакеты служат для организации кода, управления видимостью и создания модульной структуры программы.
Каждый файл Go начинается с ключевого слова package, после которого указывается имя пакета. Например, package main объявляет исполняемый пакет, а package math — вспомогательный пакет для переиспользования. Имя пакета обычно соответствует имени директории, в которой он находится, но может отличаться для пакета main.
Синтаксис
package <имя_пакета>
Пример с пакетом main
Рассмотрим пример программы, использующей пакет main. Этот пакет необходим для создания исполняемого файла. Точкой входа в программу всегда является функция main внутри пакета main:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Результат выполнения кода:
"Hello, World!"
Пример с пользовательским пакетом
Теперь создадим собственный пакет mathutil, который содержит функцию для сложения чисел. Файл должен лежать в директории с тем же именем (или в любой другой, если имя пакета задано явно). Пакеты, начинающиеся с заглавной буквы, экспортируются (видны за пределами пакета):
// Файл mathutil/mathutil.go
package mathutil
// Add складывает два целых числа.
func Add(a int, b int) int {
return a + b
}
А в основном файле программы мы импортируем наш пакет и используем экспортированную функцию:
// Файл main.go
package main
import (
"fmt"
"myproject/mathutil"
)
func main() {
res := mathutil.Add(10, 20)
fmt.Println(res)
}
Результат выполнения кода:
30
Пример с пакетом и неэкспортируемой функцией
Имена, начинающиеся со строчной буквы, являются приватными и недоступны за пределами своего пакета. Это помогает скрыть детали реализации:
// Файл utils/utils.go
package utils
// multiplyByTwo — неэкспортируемая функция.
func multiplyByTwo(x int) int {
return x * 2
}
// Double экспортирует умножение на 2.
func Double(x int) int {
return multiplyByTwo(x)
}
Используем экспортированную функцию Double в основном пакете:
package main
import (
"fmt"
"myproject/utils"
)
func main() {
res := utils.Double(5)
fmt.Println(res)
}
Результат выполнения кода:
10