Skip to content

aaronlifton/Gooo

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
run
 
 
 
 

Gooo

   _____
  / ____|
 | |  __  ___   ___   ___
 | | |_ |/ _ \ / _ \ / _ \
 | |__| | (_) | (_) | (_) |
  \_____|\___/ \___/ \___/

Go lang web app "framework" showcasing straightforward, no-magic, web development with the Go language. Includes batch template processing and interaction with postgresql databases, and Model-View architecture.

Quick Start

  • Make sure your GOPATH and GOROOT are set.
    • For help, run go help gopath
  • ./install
  • ./run
    • this performs the following commands:
    • go build
    • ./Gooo

Philosophy

  • Anti-magic
  • So simple, that it's complex.
  • So complex, that it works.
  • If it doesn't work, publish it.

Modular architecture

  • model
    • struct type
    • no special tags or fields, models are just Go structs
    • business logic - straightforward DB methods to be used in the view module
  • view
  • parses templates in tmpl/ folder and defines how they are rendered
  • uses html/template to parse and render
  • fetches rows from database as type Model interfaces
  • router
    • handles dynamic and static routes, request methods, main handler matches the request URL against the routes
    • middleware filters for restful routes
  • introspection
    • models implement interface{} and []interface{} types
    • Go's dynamic feature is interface type conversion, generally checked at runtime
    • Interface -> JSON interface{} -> []byte
    • Interface -> Struct []interface{} -> map[string]interface{}
    • GetStructValues interface{} -> []interface{}
    • InterfaceName: interface{} -> string
  • util
    • generic error handler HandlerErr(err error)

Martin Odersky

Tested and approved by Typeunsafe© Corporation


Tell me more...

Why Go?

Is it good?

Are you good?

Let's Gooo test the example blog app

  • resolve dependencies and install
    • ./install
    • don't want to use postgresql?
      • Sign up for a free Heroku Postgres account here.
      • Create a database and save the connection params for the next step.
      • Or skip this step
  • configure the database connection variable dbParams in the model package (model/model.go)
  • ./Gooo
  • http://localhost:8080/hello/world
  • Gooo celebrate
  • Gooo outside

Let's Gooo write your own Gooo app

  • resolve dependencies and install
    • ./install
    • don't want to use postgresql?
      • Sign up for a free Heroku Postgres account here.
      • Create a database and save the connection params for the next step.
  • define your model interfaces and configure the database connection in the model package (model/model.go)
    • implement your model interface types with anonymous BaseModel field
      • use `json:"-"` for type safety and Go lang future proofing
    • implement functions and variables available to all models with anonymous BaseModel field in the Model interface type
  • define your views as request handler functions in the view package (view/view.go)
  • write your templates in tmpl/ (Go text/template syntax)
  • define routes in main package gooo.go
  • ./Gooo
  • http://localhost:8080/hello/world
  • Gooo celebrate
  • Gooo outside

Gooo read these


Gopher


Enjoy,

- Aaron Lifton

About

Go lang web app "framework" showcasing straightforward, no-magic, web development

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published