utron - Go 的 MVC 框架


MIT
跨平台
Google Go

软件简介

utron 是一个 Go 语言轻量级的 MVC 框架,用于快速构建可伸缩以及可靠的数据库驱动的 Web 应用。

特性:

  • Postgres, MySQL 和 Foundation 数据库支持

  • 模块化

  • 支持中间件,所有 alice 兼容的中间件都可以使用

  • Gopher spirit (可使用 Go 语言的其他库)

  • 轻量级,只包含 MVC

  • 支持多配置文件,包括 json、yaml 和 toml

控制器示例代码:

package controllers

import (
    "net/http"
    "strconv"

    "github.com/gernest/utron"
    "github.com/gernest/utron/fixtures/todo/models"
    "github.com/gorilla/schema"
)

var decoder = schema.NewDecoder()

type TODO struct {
    *utron.BaseController
    Routes []string
}

func (t *TODO) Home() {
    todos := []*models.Todo{}
    t.Ctx.DB.Order("created_at desc").Find(&todos)
    t.Ctx.Data["List"] = todos
    t.Ctx.Template = "index"
    t.HTML(http.StatusOK)
}
func (t *TODO) Create() {
    todo := &models.Todo{}
    req := t.Ctx.Request()
    req.ParseForm()
    if err := decoder.Decode(todo, req.PostForm); err != nil {
        t.Ctx.Data["Message"] = err.Error()
        t.Ctx.Template = "error"
        t.HTML(http.StatusInternalServerError)
        return
    }

    t.Ctx.DB.Create(todo)
    t.Ctx.Redirect("/", http.StatusFound)
}

func (t *TODO) Delete() {
    todoID := t.Ctx.Params["id"]
    ID, err := strconv.Atoi(todoID)
    if err != nil {
        t.Ctx.Data["Message"] = err.Error()
        t.Ctx.Template = "error"
        t.HTML(http.StatusInternalServerError)
        return
    }
    t.Ctx.DB.Delete(&models.Todo{ID: ID})
    t.Ctx.Redirect("/", http.StatusFound)
}

func NewTODO() *TODO {
    return &TODO{
        Routes: []string{
            "get;/;Home",
            "post;/create;Create",
            "get;/delete/{id};Delete",
        },
    }
}

func init() {
    utron.RegisterController(NewTODO())
}