Мне сложно импортировать локальный файл go в другой файл go.
Структура моего проекта похожа на что-то ниже
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
Я пытаюсь импортировать a.go в b.go. Я пробовал следующее,
import "a"
import "github.com/xxxx/a"
Ничего из этого не сработало ... Я понимаю, что мне нужно вмешиваться в GOPATH, но я не мог понять это правильно. В настоящее время мой GOPATH указывает на samplego (/ workspace / samplego). Я получаю следующую ошибку
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)
Кроме того, как работает GOPATH, когда эти исходные файлы импортируются в другой проект / модуль? Будет ли тогда проблемой быть местный импорт? Что в этом случае лучше всего - иметь только один файл go в модуле (с соответствующими тестами)?
package a
объявление вверху.)package foo
) и по-прежнему не нужно напрямую импортировать друг друга. Этот ответ немного больше описывает это для модулей Go, в том числе о том, как импортировать пакеты в том же модуле в модулях Go.Ответы:
Любое количество файлов в каталоге - это один пакет; символы, объявленные в одном файле, доступны другим без каких-либо
import
s или квалификаторов. Для всех файлов нужно одно и то жеpackage foo
объявление вверху (иначе вы получите сообщение об ошибкеgo build
).Вам нужно
GOPATH
указать каталог, в котором находятся ваши каталогиpkg
,src
иbin
. Это всего лишь вопрос предпочтений, но обычно для всех ваших приложений (иногда$HOME
) создается единое рабочее пространство , а не одно для каждого приложения.Обычно путь Github будет
github.com/username/reponame
(не толькоgithub.com/xxxx
). Поэтому, если вы хотите иметьmain
и другой пакет, вы можете сделать что-тоworkspace/src
вродеgithub.com/ username/ reponame/ main.go // package main, importing "github.com/username/reponame/b" b/ b.go // package b
Обратите внимание, что вы всегда импортируете с полным
github.com/...
путем: относительный импорт не разрешен в рабочей области. Если вы устали вводить пути, используйтеgoimports
. Если вы получаете от сgo run
, пришло время переключиться наgo build
:run
сделки плохо с множественным файломmain
s , и я не стал тестом , но слышал (от Dave Чейни здесь )go run
не перестраивает грязные зависимости.Похоже, вы хотя бы пытались установить GOPATH в правильное положение, поэтому, если вы все еще застряли, возможно, укажите, как именно вы устанавливаете переменную среды (команду и т. Д.), Какую команду вы запускали и какая ошибка произошла. Ниже приведены инструкции о том, как установить его (и сделать параметр постоянным) в Linux / UNIX, а также совет команды Go по настройке рабочего пространства . Может быть, ни то, ни другое не помогает, но посмотрите и хотя бы укажите, какая часть вас смущает, если вы не уверены.
источник
package main
объявление ко всем файлам в одном каталоге, но у меня естьundefined
ошибка, яmain.go
не могу видеть функции из файла,controllers.go
который находится в том же каталоге.go run
, вам может потребоваться явно передать ему оба имени файла или переключиться на их размещение в пакете в GOPATH иgo build
его загрузку . Также дважды проверьте наличие распространенных ошибок, не связанных со структурой пакета (например, опечатки в имени). Если ничего из этого не решит, я бы открыл новый вопрос со всеми возможными подробностями; может потребоваться много дискуссий о том , как именно должны выглядеть ваш каталог, файлы и т. д., и, поскольку речь идет именно о вашей настройке, новый вопрос кажется лучшим местом для этого.Импорт не требуется, если вы декларируете оба
a.go
и находитесьb.go
в одном пакете. Затем вы можете использоватьgo run
для распознавания нескольких файлов:$ go run a.go b.go
источник
в этом случае:
main.go import "./a"
Он может вызывать функцию в a.go и b.go с заглавными буквами.
источник
Я просто хотел что-то действительно простое, чтобы переместить некоторые файлы из основной папки, например, ответ пользователя 2889485, но его конкретный ответ не сработал для меня. Мне было все равно, были они в одной упаковке или нет.
Мое рабочее пространство GOPATH
c:\work\go
и под ним у меня есть/src/pg/main.go (package main) /src/pg/dbtypes.go (pakage dbtypes)
в
main.go
яimport "/pg/dbtypes"
источник