Перейти: локальный импорт в нелокальный пакет
У меня есть следующая структура файла:
.
├── bin
│ └── hello
├── pkg
└── src
└── jacob.uk.com
├── greeting
│ └── greeting.go
└── helloworld.go
5 directories, 3 files
Со следующим GOPATH
/Users/clarkj84/Desktop/LearningGo
Выполняя /usr/local/go/bin/go install jacob.uk.com
в папке src
, я получаю сообщение об ошибке local import "./greeting" in non-local package
helloworld.go
:
package main;
import "./greeting"
func main() {
}
Ответы
Ответ 1
Нельзя использовать локальный импорт при указании нелокального пакета на go install
. Если вы хотите, чтобы локальный импорт работал, сначала смените рабочий каталог на src/jacob.uk.com
, затем выполните go install
(без указания пакета).
Конечно, если вы предоставили helloworld.go
, вы получите ошибку компиляции: imported and not used
. Но как только вы используете что-то из импортированного пакета greeting
, он должен скомпилироваться.
Но вы не должны использовать локальный импорт вообще. Вместо этого напишите:
import "jacob.uk.com/greeting"
И при этом вы сможете скомпилировать/запустить/установить его из любого места.
Ответ 2
Ввод go build
не работает с относительными путями импорта; вы должны набрать go build main.go
go install
вообще не работает с относительными путями импорта.
Это задокументировано по адресу https://golang.org/cmd/go/#hdr-Relative_import_paths.
Увидеть
для объяснения.
Ответ 3
вы можете обойти это с помощью функции поставщика
измените import "./greeting"
на import "greeting"
создайте каталог поставщика mkdir vendor
и создайте символическую ссылку ln -s ../greeting vendor/greeting