Организация многофайлового проекта Go



Примечание: этот вопрос относится к этот, но два года это очень большой срок в истории.



каков стандартный способ организации проекта Go во время разработки ?



мой проект-это единый пакет mypack, Так что я думаю, что я положил все .перейти файлы в .



но тогда я хотел бы проверить его во время разработки, поэтому мне нужен хотя бы файл, объявляющий main пакета, так что я могу сделать go run trypack.go



как мне это организовать ? Мне нужно сделать go install mypack каждый раз, когда я хочу попробовать ?

931   7  
go

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

    Ничего не найдено.