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

В Go, для импортирования пакетов из подпакетов сначала необходимо понять, что подпакеты в Go не являются непосредственными членами пакета. Они находятся в отдельных директориях, и их структура отражает иерархию пакетов.

Допустим, у нас есть следующая структура каталогов:

- main.go
- pkg
  - math
    - add.go
  - helpers
    - utils.go

В этой структуре math является подпакетом пакета pkg, а helpers также является подпакетом пакета pkg.

Если вы хотите импортировать пакет math из main.go, вам нужно использовать относительный путь импорта. Например, вы можете использовать импорт pkg/math:

import "pkg/math"

Аналогичным образом, если вы хотите импортировать файл utils.go из директории helpers, вы можете использовать импорт pkg/helpers:

import "pkg/helpers"

Если вы хотите импортировать конкретные функции из пакета или подпакета, вы также можете указать их имя после пути импорта. Например:

import "pkg/math"
import "pkg/helpers"

func main() {
    math.Add(1, 2)
    helpers.DoSomething()
}

В результате вы можете использовать импортированные функции или переменные, как и любые другие функции/переменные в Go.

Однако стоит отметить, что пакеты и подпакеты должны быть объявлены с пакетом, иначе они не будут доступны для импорта извне. Проверьте, чтобы каждая директория, содержащая подпакет, содержала файл go.mod с объявлением модуля.