https://github.com/gotuna/gotuna
  
  
    GoTuna a lightweight web framework for Go with mux router, middlewares, user sessions, templates, embedded views, and static file server. 
    https://github.com/gotuna/gotuna
  
framework go golang router web webapp
        Last synced: 6 months ago 
        JSON representation
    
GoTuna a lightweight web framework for Go with mux router, middlewares, user sessions, templates, embedded views, and static file server.
- Host: GitHub
- URL: https://github.com/gotuna/gotuna
- Owner: gotuna
- License: mit
- Created: 2021-04-08T14:08:08.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-08-31T09:50:12.000Z (about 2 years ago)
- Last Synced: 2024-08-03T19:10:03.162Z (about 1 year ago)
- Topics: framework, go, golang, router, web, webapp
- Language: Go
- Homepage: https://gotuna.netlify.app
- Size: 262 KB
- Stars: 48
- Watchers: 1
- Forks: 22
- Open Issues: 1
- 
            Metadata Files:
            - Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
 
Awesome Lists containing this project
- awesome-go-extra - gotuna - 04-08T14:08:08Z|2022-06-02T06:50:08Z| (Web Frameworks / Fail injection)
README
          
 
# 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](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.23 installed
# Quick Start
Initialize new app and install GoTuna:
```shell
mkdir testapp
cd testapp
go mod init testapp
go get -u github.com/gotuna/gotuna
```
Now create two files `main.go` and `app.html` as an example:
```go
// 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:
```html
// app.html
{{- define "app" -}}
{{- end -}}
```
Run this simple app and visit http://localhost:8888 in your browser:
```shell
go run main.go
```
# Running example apps
GoTuna comes with an example app. Make sure you have git and Go >= 1.23 installed.
```shell
git clone https://github.com/gotuna/gotuna.git
cd gotuna
go run examples/fullapp/cmd/main.go
```
# Testing
```shell
go test -race -v ./...
```
# Licence
This project is licensed under the MIT License.