|
|
7 lat temu | |
|---|---|---|
| api | 8 lat temu | |
| assets | 8 lat temu | |
| build | 8 lat temu | |
| cmd/_your_app_ | 8 lat temu | |
| configs | 8 lat temu | |
| deployments | 8 lat temu | |
| docs | 8 lat temu | |
| examples | 8 lat temu | |
| githooks | 8 lat temu | |
| init | 8 lat temu | |
| internal | 8 lat temu | |
| pkg/_your_public_lib_ | 8 lat temu | |
| scripts | 8 lat temu | |
| test | 8 lat temu | |
| third_party | 8 lat temu | |
| tools | 8 lat temu | |
| vendor | 8 lat temu | |
| web | 8 lat temu | |
| .gitignore | 8 lat temu | |
| LICENSE.md | 8 lat temu | |
| Makefile | 8 lat temu | |
| README.md | 8 lat temu | |
This is a basic layout for Go application projects. It represents the most common directory structure with a number of small enhancements along with several supporting directories common to any real world application.
Clone the repository, keep what you need and delete everything else!
Go Project Layout - additional background information.
/cmdMain applications for this project.
The directory name for each application should match the name of the executable you want to have (e.g., /cmd/myapp).
Don’t put a lot of code in the application directory. If you think the code can be imported and used in other projects, then it should live in the /pkg directory.
It’s common to have a small main function that imports and invokes the code from the /internal and /pkg directories.
/internalPrivate application and library code.
Put your actual application code in the /internal/app directory (e.g., /internal/app/myapp) and the code shared by those apps in the /internal/pkg directory (e.g., /internal/pkg/myprivlib).
/pkgLibrary code that’s safe to use by external applications (e.g., /pkg/mypubliclib).
Other projects will import these libraries expecting them to work, so think twice before you put something here :-)
/vendorApplication dependencies (managed manually or by your favorite dependency management tool).
Don’t commit your application dependencies if you are building a library.
/apiOpenAPI/Swagger specs, JSON schema files, protocol definition files.
/webWeb application specific components: static web assets, server side templates and SPAs.
/configsConfiguration file templates or default configs.
Put your confd or consule-template template files here.
/initSystem init (systemd, upstart, sysv) and process manager/supervisor (runit, supervisord) configs.
/scriptsScripts to perform various build, install, analysis, etc operations.
These scripts keep the root level Makefile small and simple.
/buildPackaging and Continous Integration.
Put your cloud (AMI), container (Docker), OS (deb, rpm, pkg) package configurations and scripts in the /build/package directory.
Put your CI (travis, circle, drone) configurations and scripts in the /build/ci directory.
/deploymentsIaaS, PaaS, system and container orchestration deployment configurations and templates (docker-compose, kubernetes/helm, mesos, terraform, bosh).
/testAdditional external test apps and test data.
/docsDesign and user documents (in addition to your godoc generated documentation).
/toolsSupporting tools for this project. Note that these tools can import code from the /pkg and /internal directories.
/examplesExamples for your applications and/or public libraries.
/third_partyExternal helper tools, forked code and other 3rd party utilities (e.g., Swagger UI).
/githooksGit hooks.
/assetsOther assets to go along with your repository.
Go Report Card - It will scan your code with gofmt, go vet, gocyclo, golint, ineffassign, license and misspell. Replace github.com/golang-standards/project-layout with your project reference.
GoDoc - It will provide online version of your GoDoc generated documentation. Change the link to point to your project.
Release - It will show the latest release number for your project. Change the github link to point to your project.
A more opinionated project template with sample/reusable configs, scripts and code is a WIP.