Skip to content

Latest commit

 

History

History
121 lines (99 loc) · 3.82 KB

README.md

File metadata and controls

121 lines (99 loc) · 3.82 KB

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