Ответ 1
Нет, в Go нет относительного импорта.
Вы должны использовать абс путь, учитывая GOPATH:
Переменная среды GOPATH указывает местоположение вашего рабочего пространства. Вероятно, это единственная переменная среды, которую вам нужно установить при разработке кода Go. Для начала создайте каталог рабочей области и установите GOPATH соответственно. см.: https://golang.org/doc/code.html#GOPATH
Пути импорта:
Путь импорта - это строка, которая однозначно идентифицирует пакет. Путь импорта пакета соответствует его расположению в рабочей области или в удаленном хранилище (объяснено ниже).
Пакеты из стандартной библиотеки имеют короткие пути импорта, такие как "fmt" и "net/http". Для ваших собственных пакетов вы должны выбрать базовый путь, который вряд ли столкнется с будущими добавлениями в стандартную библиотеку или другие внешние библиотеки.
Если вы храните свой код в хранилище исходного кода где-то, то вы должны использовать корень этого исходного хранилища в качестве базового пути. Например, если у вас есть учетная запись GitHub на github.com/user, это должен быть базовый путь.
Обратите внимание, что вам не нужно публиковать свой код в удаленном хранилище, прежде чем вы сможете его построить. Это просто хорошая привычка организовывать ваш код так, как будто вы когда-нибудь опубликуете его. На практике вы можете выбрать любое произвольное имя пути, если оно уникально для стандартной библиотеки и большей экосистемы Go.
Пример:
В этом примере предполагается, что вы установили GOPATH=/goworkdir
в своей среде ОС.
Файл: goworkdir/src/project1/utils/auth.go
package utils
func Test1() string {
return "Test1"
}
Файл: goworkdir/src/project1/controllers/login.go
package controllers
import "project1/utils"
func Test2() string {
return utils.Test1()
}
Файл: goworkdir/src/project1/main.go
package main
import (
"fmt"
"project1/controllers"
)
func main() {
fmt.Println(controllers.Test2())
}
Теперь, если вы go run main.go
, вы должны увидеть вывод:
Test1