Skip to content
/ gotuna Public

GoTuna a lightweight web framework for Go with mux router, middlewares, user sessions, templates, embedded views, and static file server.

License

Notifications You must be signed in to change notification settings

gotuna/gotuna

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PkgGoDev rests status Go Report Card Go Report Card

GoTuna - Web framework for Go

GoTuna is a lightweight web framework for Go with mux router, middlewares, user sessions, templates, embedded views, and static file server.

Please visit https://gotuna.netlify.app for the latest documentation, examples, and more.

Features

  • Router (gorilla)
  • Standard http.Handler interface
  • Middleware support
  • User session management (gorilla)
  • Session flash messages
  • Native view rendering (html/template) with helpers
  • Static file server included with the configurable prefix
  • Standard logger interface
  • Request logging and panic recovery
  • Full support for embedded templates and static files
  • User authentication (via user provider interface)
  • Sample InMemory user provider included
  • Multi-language support
  • Database agnostic

Requirements

  • Make sure you have Go >= 1.16 installed

Quick Start

Initialize new app and install GoTuna:

mkdir testapp
cd testapp
go get -u github.com/gotuna/gotuna

Now create two files main.go and app.html as an example:

// main.go

package main

import (
	"fmt"
	"net/http"
	"os"

	"github.com/gotuna/gotuna"
)

func main() {
	app := gotuna.App{
		ViewFiles: os.DirFS("."),
		Router:    gotuna.NewMuxRouter(),
	}
	
	app.Router.Handle("/", handlerHome(app))
	app.Router.Handle("/login", handlerLogin(app)).Methods(http.MethodGet, http.MethodPost)

	fmt.Println("Running on http://localhost:8888")
	http.ListenAndServe(":8888", app.Router)
}

func handlerHome(app gotuna.App) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		app.NewTemplatingEngine().
			Render(w, r, "app.html")
	})
}

func handlerLogin(app gotuna.App) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Login form...")
	})
}

This will be your app's html layout:

// app.html

{{- define "app" -}}
<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <a href="/login">Please login!</a>
  </body>
</html>
{{- end -}}

Run this simple app and visit http://localhost:8888 in your browser:

go run main.go

Running example apps

GoTuna comes with an example app. Make sure you have git and Go >= 1.16 installed.

git clone https://github.com/gotuna/gotuna.git
cd gotuna
go run examples/fullapp/cmd/main.go

Testing

go test -race -v ./...

Licence

This project is licensed under the MIT License.

About

GoTuna a lightweight web framework for Go with mux router, middlewares, user sessions, templates, embedded views, and static file server.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published