Организация многофайлового проекта Go
Примечание: этот вопрос относится к этот, но два года это очень большой срок в истории.
каков стандартный способ организации проекта Go во время разработки ?
мой проект-это единый пакет mypack, Так что я думаю, что я положил все .перейти файлы в .
но тогда я хотел бы проверить его во время разработки, поэтому мне нужен хотя бы файл, объявляющий main пакета, так что я могу сделать go run trypack.go
как мне это организовать ? Мне нужно сделать go install mypack каждый раз, когда я хочу попробовать ?
7 ответов:
Я бы рекомендовал просмотреть эту страницу на Как написать код Go
документы, как структурировать ваш проект в
go buildудобный способ, а также Как писать тесты. Тесты не должны быть cmd с помощью . Они могут быть просто названными функциями TestX как часть каждого пакета, а затемgo testоткроет их.структура, предложенная в этой ссылке в вашем вопросе, немного устарела, теперь с выпуском Go 1. Вам больше не нужно
jdi имеет правильную информацию, касающуюся использования
GOPATH. Я бы добавил, что если вы намерены иметь двоичный файл, а также вы можете добавить один дополнительный уровень в каталоги.~/projects/src/ myproj/ mypack/ lib.go lib_test.go ... myapp/ main.goпод управлением
go build myproj/mypackпостроитьmypackпакет вместе с его зависимостями работаетgo build myproj/myappпостроитьmyappдвоичный вместе с его зависимостями, которые, вероятно, включают в себяmypackбиблиотека.
я изучил ряд проектов Go, и есть довольно много вариаций. Вы можете как бы сказать, кто приходит из C, а кто из Java, так как бывший дамп почти все в корневом каталоге проектов в A
mainпакет, и последние, как правило, положить все в
Я считаю очень полезным понять, как организовать код в Golang этой главе http://www.golang-book.com/11 из книги, написанной Калебом Докси
похоже, что нет стандартного способа организации Go-проектов, но https://golang.org/doc/code.html указывает наилучшую практику для большинства проектов. ответ jdi хорош, но если вы используете github или bitbucket и у вас есть дополнительные библиотеки, вы должны создать следующую структуру:
~/projects/ bin/ pkg/ src/ github.com/ username/ mypack/ foo.go bar.go mypack_test.go mylib/ utillib.go utillib_test.goтаким образом, вы можете иметь отдельный репозиторий для mylib, который может использоваться для других проектов и может быть получен с помощью "go get". Ваш mypack проект может импортировать вашу библиотеку с помощью "github.com/username/mylib для получения дополнительной информации:
http://www.alexvictorchan.com/2014/11/06/go-project-structure/
храните файлы в одном каталоге и используйте
package mainво всех файлах.выполнить:myproj/ your-program/ main.go lib.go~/myproj/your-program$ go build && ./your-program
давайте исследователь, как
go get repository_remote_urlкоманда управляет структурой проекта под$GOPATH. Если мы сделаемgo get github.com/gohugoio/hugoОн будет клонировать репозиторий под$GOPATH / src/repository_remote/user_name / project_name
$GOPATH / src/github.com/gohugoio/hugo
это хороший способ создать свой начальный путь проекта. Теперь давайте исследователь, что такое типы проектов там и как организованы их внутренние структуры. Все проекты golang в сообществе могут быть классифицированы в разделе
Libraries(нет исполняемых двоичных файлов)Single Project(содержит только 1 исполняемый двоичный файл)Tooling Projects(содержит несколько исполняемых файлов)
вообще файлы проекта golang можно упаковать под какие-то принципы дизайна например DDD, POD
большинство доступных проектов go следует за этим Пакет Ориентированный Дизайн
Пакет Ориентированный Дизайн поощряйте разработчика сохранять реализацию только внутри своих собственных пакетов, кроме
/internalпакет эти пакеты не могут общаться друг с другом
библиотеки
- такие проекты, как драйверы баз данных, qt можно поставить под эту категорию.
- некоторые библиотеки, такие как цвета,теперь следует за плоской структурой без каких-либо других пакетов.
- большинство этих библиотечных проектов управляет пакетом под названием внутренние.
/internalпакет используется для обслуживания файлов go, которые используют другие несколько пакетов внутри проекта.- нет исполняемых двоичных файлов, поэтому нет файлов, содержащих главная func.
~/$GOPATH/ bin/ pkg/ src/ repository_remote/ user_name/ project_name/ internal/ other_pkg/
Один Проект
- такие проекты, как угу,etcd есть один основная их функция в корневом уровне.
- цель состоит в том, чтобы создать один единственный двоичный
Инструментальные Проекты
- такие проекты, как kubernetes, go-ethereum есть несколько основной функционал организован под пакетом под названием cmd
cmd/пакет управляет количеством двоичных файлов (инструментов), которые мы хотим построить
~/$GOPATH/ bin/ pkg/ src/ repository_remote/ user_name/ project_name/ cmd/ binary_one/ main.go binary_two/ main.go binary_three/ main.go other_pkg/
Comments