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

Так что я уже несколько недель ломаю голову над этим, и после прочтения нескольких источников о том, как работает $ 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 # и т. Д.… Thenв каждом проекте он содержит репозиторий с исходным кодом.

Недавно мне удалось успешно собрать, добавив 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, или мне нужно принудительно указывать путь вывода при использовании команды? Мне известно о GOBIN, но, похоже, это не так.работать.

1 Ответ

0 голосов
/ 01 декабря 2018

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

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

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

...