Я пытаюсь понять, как организовать код go, используя «внутренние» пакеты. Позвольте мне показать, что структура у меня есть:Как использовать «внутренние» пакеты?
project/
internal/
foo/
foo.go # package foo
bar/
bar.go # package bar
main.go
# here is the code from main.go
package main
import (
"project/internal/foo"
"project/internal/bar"
)
project/
находится вне от GOPATH дерева. Независимо от пути, который я пытаюсь импортировать из main.go
, ничего не работает, единственный случай, который работает, - import "./internal/foo|bar"
. Я думаю, что я делаю что-то неправильно или вообще ошибаюсь в «внутренней» идее пакета. Может, кто-нибудь прояснит ситуацию, пожалуйста?
UPDATE
В приведенном выше примере правильно только то, что мне нужно было поместить project/
папку под $GOPATH/src
. Так что путь импорта, как project/internal/foo|bar
, является работоспособным, если мы импортируем его только из поддерева project/
, а не извне.
Вы не можете импортировать пакеты, которые не в '$ GOPATH/src'. Попробуйте создать пакет 'project/baz', вы также не сможете его импортировать. Поместите все свои проекты в GOPATH. –
Что делать, если я не хочу размещать каждый проект под GOPATH? –
Вот как работают инструменты go. Если вы хотите использовать пакет, он должен находиться под GOPATH. – JimB