Настройка правильной структуры каталогов Golang с помощью git для использования go build на пользовательских пакетах

Так что я почесал свою голову в этом в течение пары недель, и после прочтения нескольких источников о том, как $ go build работает и три магических справочника, /bin, /pkg, /src Мне до сих пор не очень понятно, как создавать проекты Golang с использованием пользовательских пакетов и как управлять git-репо.

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

Я работаю над проектом Go в каталоге проекта, который отличается от стандартного .../user/go/..., Для всех моих проектов у меня есть другое дерево каталогов, которое структурировано так:

projects
 | project-a
 | project-b
    | docs
    | media
    | scrum
    | project-b   <-- git repo containg Go structure
       | .git
       | gitignore.txt
       | bin
       | pkg
       | src
          | custom-package-a
          |  | foo.go
          | custom-package-b
          |  | bar.go
 |     | main.go      
 | project-c

мой projects Каталог может содержать проект любого типа: java, Unity3D, VisualC# и т. д., а затем в каждом проекте, в котором содержится репозиторий с исходным кодом.

Я был в состоянии построить успешно недавно, добавив projects/project-b/project-b на мой GOPATH, поэтому он видит каталог src.

Так должна выглядеть структура файла для типичного проекта Go, даже если это правильно?

В моем GOPATH я удалил оригинальный путь к user/go и только использовал каталог проекта только. При установке других пакетов из github они включаются в репозиторий, потому что GOPATH нигде не установлен, поэтому в моем репо есть эти разные подмодули. Разумно ли устанавливать внешние пакеты в репозиторий или они должны идти в другой каталог go? Я боюсь, что это может испортить репо.

Я могу включить

Мне нужно знать, правильно ли я использую пользовательские пакеты. Мое намерение состоит в том, чтобы использовать объектно-ориентированный подход с моей базой кода, и я рассматриваю каждый пакет как класс. Разумно ли делать собственные пакеты для обработки их как классов? Я счел необходимым избежать одноименных конфликтов между функциями и переменными. Пример: package-a.GetThing(), package-b.GetThing(), Обе функции дают схожий (не точный) вывод, но работают с разными наборами данных и требуют разной реализации.

Моя консоль находится в projects/project-b/project-b/ когда я использую go build и это работает правильно. То же самое, если я перееду main.go внутри Src.

Одна проблема заключается в том, что сборщик Go странным образом помещает скомпилированный двоичный файл в тот же каталог, который я вызываю go build от. не должны go build помещать его в bin каталог, или мне нужно обеспечить выходной путь при использовании команды? Я знаю о Гобине, но, похоже, он не работает.

1 ответ

Начиная с Go 1.11 вам не нужно использовать $GOPATH.

Ты можешь использовать go mod init [your repo] и просто беги go install или же go build Депс будет загружен для вас и go.mod а также go.sum файлы будут созданы для отслеживания deps.

Проверьте это README

Другие вопросы по тегам