golang неожиданный макет каталога

Итак, я скачал minio с github.com/minio/minio.

Я хочу запустить его из источника,

Я создаю свой каталог, например:

~/Downloads/minio-RELEASE.2017-06-13T19-01-01Z
|
 src
   |
    all minio directories, including vendor, like the image below

введите описание изображения здесь

Я также использую godep для разрешения других зависимостей в GOPATH.

Теперь я запускаю его из Gogland (перейдите в IDE).

Это показывает:

GOROOT=/usr/local/Cellar/go/1.8.3/libexec
GOPATH=/Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z:/Users/xl/go
/usr/local/Cellar/go/1.8.3/libexec/bin/go build -i -o /private/var/folders/8v/6dg7d6mx2850sv1gp8ts9thm0000gn/T/go_run_main_gogo /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/main.go
unexpected directory layout:
    import path: github.com/Azure/azure-sdk-for-go/storage
    root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    expand root: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src
    expand dir: /Users/xl/Downloads/minio-RELEASE.2017-06-13T19-01-01Z/src/vendor/github.com/Azure/azure-sdk-for-go/storage
    separator: /

Теперь я в замешательстве, в чем проблема? Все файлы есть, и каталоги такие же, как и то, что он печатает. Как это исправить? Спасибо.


person Wingzero    schedule 01.08.2017    source источник


Ответы (6)


См. макет кода GitHub.

$GOPATH — это корень проекта. Каждое из ваших репозиториев Github будет проверено на несколько папок ниже $GOPATH.
Ваша переменная $GOPATH будет указывать на корень вашего рабочего пространства Go, как описано в Как написать код Go.

В вашем случае под вашей папкой GOPATH у вас должно быть

src/github.com/minio/minio

И только затем "все каталоги minio, включая vendor"

person VonC    schedule 01.08.2017
comment
Спасибо за ваш ответ. Но я новичок и до сих пор не понимаю, как это исправить.. вы сказали, что у меня должен быть src/github.com/minio/minio, но у меня есть исходный код напрямую, а не загруженный бо go get - person Wingzero; 01.08.2017
comment
@Wingzero создайте GOPATH/src/github.com/minio, затем клонируйте репозиторий внутри этой папки: это даст вам GOPATH/src/github.com/minio/minio, и тогда будет работать go build. Или просто попробуйте go get github.com/minio/minio: это должно сделать то же самое (клонирование + сборка) - person VonC; 01.08.2017
comment
Удивительно, это работает. Большое спасибо! Жаль, что Гогланд все еще не может отладить break в моей точке останова. Тем не мение - person Wingzero; 02.08.2017
comment
Если вы скажете мне, где установить контрольные точки, я сообщу о проблеме здесь youtrack.jetbrains.com/ Issues/Go и, надеюсь, исправить это. - person dlsniper; 02.08.2017

На Golang 1.13 это внезапно произошло со мной во всем моем коде после обновления с 1.11 до 1.13.

Кажется, golang 1.13 больше не любит импорт типа «./something».

Мне пришлось разработать любой импорт, например "myapp/что-то"

person Philippe Thomassigny    schedule 15.10.2019
comment
Приложение: теперь лучше всего использовать модули. создайте модуль из своего кода с помощью go mod init, затем вставьте ссылку на свои каталоги в качестве директивы «заменить». См. blog.golang.org/using-go-modules для получения дополнительной информации. - person Philippe Thomassigny; 25.01.2021

Это может произойти, если у вас есть дубликаты репозиториев в goroot И gopath. Удалите goroot.

person Sentinel    schedule 29.05.2019

Также с go1.13 (с модом move to go) я обнаружил, что если я переместил свой проект из-под моего $GOPATH, я мог бы использовать оператор import "./mypackage". Тот же проект под $GOPATH не будет строиться с ошибками, указанными выше в OP. Я пока не готов отказаться от своей переменной среды $GOPATH, но мне нравится, когда это возможно, хранить небольшие пакеты локально в своем проекте, не привязываясь к файлу go.mod, когда в этом нет необходимости.

person WeakPointer    schedule 21.03.2020

У меня возникла эта проблема после того, как я понял, что не могу правильно импортировать локальные пакеты из-за местоположения моего проекта. Моего проекта не было в локации GOPATH, поэтому я переместил свой проект туда. Перед переездом

Я импортировал пакеты через ./имя пакета, и после того, как я переместил свой проект в GOPATH, я правильно импортировал пакеты через имя проекта/имя пакета.

Итак, что я сделал, так это правильно импортировал пакеты «имя проекта/имя пакета», поэтому я исправил импорт «./имя пакета» на «имя проекта/имя пакета. Надеюсь, это не слишком запутанно. Кажется, что эта ошибка может появиться из разных ситуаций.

person Kakjens91    schedule 20.05.2020

Если папки вашего проекта находятся в каталоге $GOPATH, вам следует импортировать пакеты без использования ./package.

Вы можете импортировать пакеты с именем ./package, только если файлы вашего проекта находятся за пределами $GOPATH.

person Ashok v    schedule 25.05.2021