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