Работа с пакетами, зависимостями в GO. (go.mod, vendor, gopath)

Помогите разобраться в данном вопросе, верно ли я понимаю:

  • GOPATH и go.mod это 2 разных подхода для работы с зависимостями и вместе они не совместимы
  • go.mod позволяет более безопасно работать с зависимостями т.к. он привязывается не просто к репозиторию пакета, а к конкретной версии этого репозитория
  • vendor позволяет скачать все зависимости в каталог и их использовать, что делает проект автономным, vendor с go.mod и GOPATH напрямую не связаны.

Вроде в теории все понятно, не понятно на практике.

Проблема 1 Есть проект, в нем есть go.mod, в проекте подключен пакет github.com/RobotsAndPencils/buford/payload, в go.mod добавлен github.com/RobotsAndPencils/buford если удалить go.mod при сборке проекта ругается так

D:\GoMy\src\github.com\RobotsAndPencils\buford\pushpackage\pushpackage.go:15:2: cannot find package "github.com/aai/gocrypto/pkcs7" in any of:
 D:\Go\src\github.com\aai\gocrypto\pkcs7 (from $GOROOT)
 D:\GoMy\src\github.com\aai\gocrypto\pkcs7 (from $GOPATH)

в GOPATH действительно нет данного пакета, но он есть в каталоге vendor, почему GO игнорит каталог вендор и как это связано с наличием файла go.mod мне не понятно.

Проблема 2 в корне проекта есть несколько файлов *.go и они с разными пакетами, даже IDE на это обращает внимание

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

соответственно при попытке скомпилить проект или запустить дебаг из IDE (goland) ругается что не может загрузить пакеты

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

в данном случаи помогает build c ключом -o (go build *.go в винде не пашет). В принципе можно было бы сказать, так устроен GO и разойтись, но я попробовал создать свой тестовый проект с такой структурой

test
|-pack
|    |-test.go (package test)
|-main.go (package main)
|-test.go (package test)

в main.go подключен package test в test.go ничего не подключено, IDE так же обращает внимание на multiple package, но при это он прекрасно собирается так go build main.go и можно дебажить в IDE, так в чем нюанс, почему один проект ругается, другой норм работает?


Ответы (0 шт):