Revel requires itself and the user application to be installed into a GOPATH layout as prescribed by the go command line tool. (See “GOPATH Environment Variable” in the go command documentation)
Default Layout
Below is the recommended layout of a Revel application, supplemented withdomain entities and services.
- my_gocode/ - GOPATH root
- src/ - GOPATH src/ directory
- github.com/revel/revel/ - Revel source code
- bitbucket.org/me/sample/ - Sample app root
- entities/ - domain entities
- app/ - app sources
- controllers/ - app controllers
- init.go - interceptor registration
- models/ - app domain models
- jobs/ - app domain jobs
- services/ - app domain services
- routes/ - reverse routes (generated code)
- views/ - templates
- tmp/ - app main file, generated code
- controllers/ - app controllers
- tests/ - test suites
- conf/ - configuration files
- app.conf - main configuration file
- routes - routes definition file
- messages/ - i18n message files
- public/ - static/public assets
- src/ - GOPATH src/ directory
The app/
directory contains the source code and templates for your application.
- app/controllers/ - All controllers are required here
- app/views - All templates are required here
Beyond that, the application may organize its code however it wishes. Revelwill watch all directories underapp/
and rebuild when itnotices any changes. Any dependencies outside ofapp/
will not be watched forchanges, it is the developer’s responsibility to recompile when necessary.
Additionally, Revel will import any packages within app/
(or importedmodules) that contain init()
functions on startup, to ensurethat all of the developer’s code is initialized.
The app/init.go
file is a conventional location to register all of theinterceptor hooks. The order of init()
functions isundefined between source files from the same package, so collecting all of theinterceptor definitions into the same file allows the developer to specify (andknow) the order in which they are run. (It could also be used for otherorder-sensitive initialization in the future.)
conf/ directory
The conf/
directory contains the application’s configuration files. There aretwo main configuration files:
- app.conf - the main configuration file for the application
- routes - the URL routing definition file.
messages/ directory
The messages/
directory contains all localized message files.
public/ directory
Resources stored in the public/
directory are static assets that are serveddirectly by the web server. Typically it is split into three standardsub-directories for images/
, css/
stylesheets and js/
JavaScript files.
The names of these directories may be anything and the developer need only update the routes.