martini

package main

import "github.com/go-martini/martini"

func main() {
  m := martini.Classic()
  m.Get("/", func() string {
    return "Hello world!"
  })
  m.Run()
}

type ClassicMartini struct {
    *Martini
    Router
}
func Classic() *ClassicMartini {
    r := NewRouter()
    m := New()
    m.Use(Logger())
    m.Use(Recovery())
    m.Use(Static("public"))
    m.MapTo(r, (*Routes)(nil))
    m.Action(r.Handle)
    return &ClassicMartini{m, r}
}
ClassicMartini 实现了Martini和Router接口, Martini对象通过ServerHttp每次请求来了,createContext,运行context.run(),这个方法里遍历运行各个martini 的handlers,最后运行 martini的action 函数,而这个action 被设置成Router的Handle函数,因此Router的Handle函数会成为每个请求的路由路口,同时router也有个相应的routecontext。Recover handler就是运行了一个defer函数。 里面还有defaultReturnHandler,这个在routecontext.run()函数里被调用,每次调用一个route handler,如果有返回,就会通过它写入responsewriter。一旦检测到有写出status就终止后面的routehandler?
时间: 2024-07-28 22:54:14

martini的相关文章

『Golang』Martini框架入门

本文介绍golang中的优秀web开发框架martini! 序 Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架.Martini是一个专门用来处理Web相关内容的框架,其并没有自带有关ORM或详细的分层内容.所以当我们使用Martini作为我们的开发框架时,我们还需要选取适合的ORM等其他包. 安装 go get github.com/codegangsta/martini 使用 我们可以使用如下的代码来测试我们安装的包是否是可用的: // ser

golang martini 源码阅读笔记之martini核心

继上一篇关于inject注入的笔记,理解了martini的关键核心之一:依赖注入.注入回调函数,由运行时进行主动调用执行.这一篇主要是注解martini的骨架martini.go的实现,下面先从一个简单的martini使用实例,即创建一个最简单的http服务器开始. server.go //martini使用简单实例 package main import "github.com/go-martini/martini" func main() { m := martini.Classi

golang martini 源码阅读笔记之inject

martini是go语言写的一个超级轻量的web开源框架,具体源码可在github搜索找到.13年那会开始接触go语言时有稍微看过这个框架,由于之后没有继续使用go就慢慢忽略了,最近由于手头项目可能会用到,因此又想起这个框架. github上显示该项目更新不断,说明真是个好框架,简洁高效的东西从来都不缺少拥护者.周末阅读martini源码时做了注释写下一些理解,主要是inject.go以及martini.go两个文件,后续估计还会再阅读路由功能的主要文件. 注:以下的'泛型'均表示interfa

Martini 框架

Martini核心部分Injector Injector模块总体构造 injector对象: type injector struct { values map[reflect.Type]reflect.Value // 保存<类型,值>对 parent Injector } TypeMaper接口 type TypeMapper interface { Map(interface{}) TypeMapper // 类型映射 MapTo(interface{}, interface{}) Ty

【玩转Golang】beego下实现martini中的透明式静态文件服务(static folder)效果。

出于效率等原因,最近将web框架由martini切换为了beego,其他地方都很平顺,只是两个框架的handler签名不一致,需要修改,所以耗时较长,这是预计到的.但是有一个地方没有预计到,也耗费了较多时间,那就是静态文件的服务. 用过martini的tx都知道,在mairtini中如果我们设置一个目录为静态文件目录,只需添加martini的Static插件,如设置web子目录为应用的静态文件路径: m.Use(martini.Static("web")) 此时,如果我们访问一个url

Golang开发环境搭建(Notepad++、LiteIDE两种方式以及martini框架使用)

本文介绍两种Golang的开发环境一种基于notepad++.另一种基于liteide. 1.下载Golang语言的pkg:http://golangtc.com/download 直接点击安装,一路next. 2.程序员必备神器notepad++开发Golang环境很简单 一次点击:插件->Plugin Manger->Show Plugin Manger,安装插件GOnpp,重启notepad++. 新建文件命名为hello.go用notepad++打开,拷贝如下代码: package m

《Docker技术入门与实战》pdf

下载地址:网盘下载 内容简介  · · · · · · [编辑推荐] <Docker技术入门与实战>是中国首部docker著作,一线Docker先驱实战经验结晶,来自IBM和新浪等多位技术专家联袂推荐! <Docker技术入门与实战>结合企业生产环境,深入浅出地剖析 Docker 的核心概念.应用技巧.实现原理以及生态环境,为解决各类问题提供了有价值的参考. [内容简介] 在云计算时代,开发者将应用转移到云上已经解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在.Docke

Go语言(golang)开源项目大全

转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析器控制台用户界面加密数据处理数据结构数据库和存储开发工具分布式/网格计算文档编辑器Encodings and Character SetsGamesGISGo ImplementationsGraphics and AudioGUIs and Widget ToolkitsHardwareLangu

记录下学习Go语言时用到的一些项目

IDE:liteide Web Framework:beego,Martini,macaron Orm:gorm,xorm 脚手架: goconfig,go-sql-driver 一些应用项目: cms:sudochina spider:go_spider blog:go_blog Go还是比较适合服务器开发,后台服务应用.不建议纯Web