這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Martini架構是使用Go語言作為開發語言的一個強力的快速構建模組化web應用與服務的開發架構。Martini是一個專門用來處理Web相關內容的架構,其並沒有內建有關ORM或詳細的分層內容。所以當我們使用Martini作為我們的開發架構時,我們還需要選取適合的ORM等其他包。昨天大象哥哥看了下,感覺還是蠻屌蠻簡單的,不囉嗦上代碼。
package mainimport ("github.com/astaxie/beego/context""github.com/go-martini/martini""github.com/martini-contrib/render""net/http""fmt")//定義一個自己的中介軟體,這裡將beego的context注入func myContext() martini.Handler {return func(res http.ResponseWriter, req *http.Request, c martini.Context) {ctx := context.Context{Request: req, ResponseWriter: res}ctx.Input = context.NewInput(req)ctx.Output = context.NewOutput()c.Map(ctx)}}func main() {m := martini.Classic()m.Use(render.Renderer()) //注入中介軟體(渲染JSON和HTML模板的處理器中介軟體)m.Use(myContext()) //注入自己寫的中介軟體m.Use(func(c martini.Context) {fmt.Println("before a request")c.Next() //Next方法之後最後處理fmt.Println("after a request")})//普通的GET方式路由m.Get("/", func() string {return "hello world!"})//路由分組m.Group("/books", func(r martini.Router) {r.Get("/list", getBooks)r.Post("/add", getBooks)r.Delete("/delete", getBooks)})//我們以中介軟體的方式來注入一個Handlerm.Use(MyHeader(m))m.RunOnAddr(":8080") //運行程式監聽連接埠}func getBooks() string {return "books"}//中介軟體Handlerfunc MyHeader(m *martini.ClassicMartini) martini.Handler {return func() {m.Group("/app", func(r martini.Router) {my := new(App)r.Get("/index", my.Index)r.Get("/test/:aa", my.Test)})}}//應用的處理type App struct{}func (this *App) Index(r render.Render, ctx context.Context) {fmt.Println(ctx.Input.Query("action"))ctx.WriteString("你好世界")}func (this *App) Test(r render.Render, params martini.Params, req *http.Request) {fmt.Println(params)parm := make(map[string]interface{})if t, ok := params["aa"]; ok {parm["aa"] = t}req.ParseForm()fmt.Println(parm, req.Form)r.Text(200, "----")}