Голанг неожиданный макет каталога
Итак, я скачал минио с github.com/minio/minio
Я хочу запустить его из источника,
Я создаю свой каталог, как:
~/Downloads/minio-RELEASE.2017-06-13T19-01-01Z
|
src
|
all minio directories, including vendor, like the image below
Я также использую godep
разрешить другие зависимости под GOPATH.
Теперь я запускаю его из Гогланда (иди в 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: /
Теперь я в замешательстве, в чем проблема? Все файлы там, а каталоги такие же, как и то, что они печатают. Как мне это исправить? Благодарю.
6 ответов
Посмотреть макет кода GitHub
$GOPATH
является корнем проекта - каждый из ваших репозиториев Github будет проверен несколькими папками ниже$GOPATH
,
Ваш$GOPATH
переменная будет указывать на корень вашего рабочего пространства Go, как описано в разделе Как писать код Go.
В вашем случае ниже вашего GOPATH
папка, вы должны иметь
src/github.com/minio/minio
Только тогда "все каталоги minio, включая вендора"
На Golang 1.13 это внезапно случилось со всем моим кодом после обновления с 1.11 до 1.13.
Кажется, что golang 1.13 больше не любит импорт вроде "./something".
Мне пришлось разработать любой импорт типа "myapp/something"
Это может произойти, если у вас есть дубликаты репозитория под goroot AND gopath. Удалить goroot один.
Также с go1.13 (с модом move to go) я обнаружил, что если бы переместил свой проект из-под моего $GOPATH, я мог бы использовать оператор import "./mypackage". Тот же проект под $ GOPATH не будет построен с ошибками, указанными выше OP. Я еще не готов отказаться от своей переменной среды $GOPATH, но мне нравится, когда это возможно, хранить небольшие пакеты локально для своего проекта, не сохраняя файл go.mod, когда в этом нет необходимости.
Если папки вашего проекта находятся в каталоге $GOPATH, тогда вам следует импортировать свои пакеты без использования "./package".
Вы можете импортировать пакеты с именем "./package", только если файлы вашего проекта находятся за пределами $GOPATH
У меня возникла эта проблема после того, как я понял, что не могу правильно импортировать локальные пакеты из-за местоположения моего проекта. Моего проекта не было в локации GOPATH, поэтому я переместил свой проект туда. Перед переездом
Я импортировал пакеты через имя./package, и после того, как я переместил свой проект в GOPATH, я правильно импортировал пакеты через имя проекта / имя пакета.
Итак, что я сделал, так это импортировал пакеты правильным способом "имя проекта / имя пакета", поэтому я исправил свой импорт "./packagename" на "" имя проекта / имя пакета. Надеюсь, это не слишком запутанно. Похоже, что эта ошибка может возникать в разных ситуациях.