Относительный импорт в Go
у меня есть проект со следующей структурой каталогов
utils(pkg)
| auth.go (has a function names test1)
controllers(pkg)
| login.go (has a function names test2)
Я пытаюсь получить доступ к функции test1 от входа в систему.идти. Вот что я сделал
import "../utils"
func test2(c *gin.Context) bool{
utils.test1()
}
но я всегда получаю Unresolved reference test1
. Я новичок в этом деле . Может ли кто-нибудь помочь, почему я получаю эту ошибку?
2 ответов
нет там никаких относительный импорт в Golang.
вы должны использовать путь abs, учитывая GOPATH:
переменная среды GOPATH указывает расположение рабочей области. Вероятно, это единственная переменная среды, которую вам нужно будет установить при разработке кода Go. Для начала создайте каталог рабочей области и установите GOPATH соответствующим образом. смотри:https://golang.org/doc/code.html#GOPATH
импорт путей:
путь импорта это строка, которая однозначно идентифицирует пакет. Путь импорта пакета соответствует его местоположению в рабочей области или в удаленном репозитории (поясняется ниже).
пакетам из стандартной библиотеки предоставляются короткие пути импорта, такие как" fmt "и"net/http". Для собственных пакетов необходимо выбрать базовый путь, который вряд ли столкнется с будущими добавлениями к стандартной библиотеке или другим внешним библиотекам.
если вы держите свой код в исходный репозиторий где-то, тогда вы должны использовать корень этого исходного репозитория в качестве базового пути. Например, если у вас есть учетная запись GitHub на github.com/user, это должен быть ваш базовый путь.
обратите внимание, что вам не нужно публиковать свой код в удаленном репозитории, прежде чем вы сможете его построить. Это просто хорошая привычка организовывать свой код, как будто вы когда-нибудь опубликуете его. На практике вы можете выбрать любое произвольное имя пути, если оно уникально для стандартной библиотеки и больше идут экосистемы.
пример:
в этом примере предполагается, что вы установили 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
вы должны увидеть output:
Test1
Я думаю, что вы можете просто ящик поставщиков каталоге рядом с вашим исходным файлом, который выступает как относительно GOPATH, а затем создать относительную символическую ссылку, от которой можно доехать до пакета, который вы хотите импортировать внутрь поставщиков каталоге, а затем импортировать пакет, если поставщик каталог ваш $GOPATH/src/и.