Назад к вопросам
Junior
147
questionbank

Как создавать и импортировать пакеты в Go?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Создание пакета:

  1. Создайте директорию, имя которой будет соответствовать имени пакета.
  2. Создайте в этой директории файл с расширением .go.
  3. В начале файла укажите объявление пакета с ключевым словом package, за которым следует имя пакета:
    package mypackage // Имя_пакета
    
  4. Экспортируемые (доступные из других пакетов) идентификаторы (переменные, функции, типы) должны начинаться с заглавной буквы.

Импорт пакета:

В другом файле .go, где нужно использовать пакет:

  1. Используйте объявление import в начале файла, после объявления пакета и до объявления функций:
    import "путь/к/mypackage" // Путь_к_пакету
    
    Путь к пакету зависит от того, где находится пакет относительно GOPATH или модуля Go.

Пример создания и использования:

Допустим, у нас есть структура проекта:

myproject/
├── main.go
└── mypackage/
    └── constants.go

File mypackage/constants.go:

package mypackage

// MyConstant экспортируется, так как начинается с заглавной буквы
const MyConstant = "Hello from mypackage"

// myInternalConstant не экспортируется
const myInternalConstant = "This stays here"

File main.go:

package main

import (
	"fmt"
	"log" // Импорт стандартной библиотеки
	"myproject/mypackage" // Импорт нашего пакета
)

func main() {
	fmt.Println("Using constant from mypackage:")
	fmt.Println(mypackage.MyConstant) // Доступ к экспортируемой константе

	// fmt.Println(mypackage.myInternalConstant) // Ошибка компиляции: myInternalConstant не экспортируется

	log.Println("Program finished.") // Использование пакета log
}

При использовании модулей Go (рекомендуемый способ), путь к пакету обычно совпадает с путем в вашем репозитории или go.mod. В примере выше, myproject - это имя модуля.

Возможные варианты импорта:

  • Стандартный импорт: import "fmt"
  • Импорт с алиасом: import f "fmt" (использование: f.Println(...))
  • Точечный импорт (не рекомендуется для общего использования): import . "fmt" (использование: Println(...))
  • Пустой импорт (для выполнения пакета без явного использования его содержимого, например, для регистрации драйверов): import _ "database/sql/driver"