Относительный импорт в 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/и.