Объявление пакета package

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

Каждый файл Go начинается с ключевого слова package, после которого указывается имя пакета. Например, package main объявляет исполняемый пакет, а package math — вспомогательный пакет для переиспользования. Имя пакета обычно соответствует имени директории, в которой он находится, но может отличаться для пакета main.

Синтаксис

gopackage <имя_пакета>

Пример с пакетом main

Рассмотрим пример программы, использующей пакет main. Этот пакет необходим для создания исполняемого файла. Точкой входа в программу всегда является функция main внутри пакета main:

gopackage main

import "fmt"

func main() {
  fmt.Println("Hello, World!")
}

Результат выполнения кода:

go"Hello, World!"

Пример с пользовательским пакетом

Теперь создадим собственный пакет mathutil, который содержит функцию для сложения чисел. Файл должен лежать в директории с тем же именем (или в любой другой, если имя пакета задано явно). Пакеты, начинающиеся с заглавной буквы, экспортируются (видны за пределами пакета):

go// Файл mathutil/mathutil.go
package mathutil

// Add складывает два целых числа.
func Add(a int, b int) int {
  return a + b
}

А в основном файле программы мы импортируем наш пакет и используем экспортированную функцию:

go// Файл main.go
package main

import (
  "fmt"
  "myproject/mathutil"
)

func main() {
  res := mathutil.Add(10, 20)
  fmt.Println(res)
}

Результат выполнения кода:

go30

Пример с пакетом и неэкспортируемой функцией

Имена, начинающиеся со строчной буквы, являются приватными и недоступны за пределами своего пакета. Это помогает скрыть детали реализации:

go// Файл 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 в основном пакете:

gopackage main

import (
  "fmt"
  "myproject/utils"
)

func main() {
  res := utils.Double(5)
  fmt.Println(res)
}

Результат выполнения кода:

go10

Смотрите также

  • инструкцию import,
    которая используется для подключения других пакетов
  • объявление func,
    которое определяет функции внутри пакета
  • ключевое слово var,
    для объявления переменных на уровне пакета
  • конструкцию type,
    позволяющую определять собственные типы в пакете