Работа с пакетами, зависимостями в 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, так в чем нюанс, почему один проект ругается, другой норм работает?

