Скачал с гитхаба несколько интересующих меня проектов, изучаю код.
В проекте несколько "пакетов" — т.е. папок, в каждой папке-пакете несколько файлов, в начале каждого файла — инструкция package имя_пакета, где имя_пакета совпадает с именем папки. Ну допустим это так принято.
В секциях import подключаются пакеты — встроенные в Go и какие-то с гитхаба. И вот что непонятно
1. Прежде всего, мне попадается довольно много проектов, в которых наподключена куча всего с гитхаба. Это теперь так принято — доверять непойми чьему коду? Я понимаю в С++ существуют некие общепринятые библиотеки типа Буста, да и то во многих случаях их стараются избегать. А в Go другая философия? Есть ли хотя-бы какие-то "курируемые списки" хороших библиотек (желательно курируемые самими разработчиками языка)?
2. Самое главное что непонятно — пути к собственным пакетам (т.е. тем, код которых включен в проект и написан тем же автором) тоже организованы через гитхаб.
В результате go, вместо того чтобы использовать локальные исходники, которые лежат тут же рядом, скачивает их с гитхаба, кладет в какую-то мутную папку вида
c:/Users/<username>/go/pkg/mod, и компилирует оттуда.
Вот сейчас прошелся по всем исходникам проекта и заменил пути вида github.com/UserName/RepoName/PackageName на ModuleName/PackageName, где ModuleName — это просто имя моего проекта, указанное в go.mod. И все компилируется, но теперь (как я понимаю) исходники пакетов будут браться локально, и я смогу исправлять их также локально вместе с исходниками главного (исполняемого) пакета.
Прав ли я? И если да, то как предполагается работать над кодом библиотек, если бы я такое не сделал — постоянно синхронизировать с гитхабом перед компиляцией? (но в такое я как-то совсем не верю). Или эти пакеты как-то синхронизировались бы локально сами (между рабочей папкой и той что на
c:/users)? Или я вообще чего-то здесь не понимаю.
Мне вообще нравится концепция, когда исходники полностью самодостаточны и полностью компилируются на машине без интернета. Но здесь похоже все наоборот...