Перейти: локальный импорт в нелокальный пакет

У меня есть следующая структура файла:

.
├── 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