本文介绍golang中的优秀web开发框架martini!

Martini框架是使用Go语言作为开发语言的一个强力的快速构建模块化web应用与服务的开发框架。Martini是一个专门用来处理Web相关内容的框架,其并没有自带有关ORM或详细的分层内容。所以当我们使用Martini作为我们的开发框架时,我们还需要选取适合的ORM等其他包。

安装

go get github.com/codegangsta/martini

使用

我们可以使用如下的代码来测试我们安装的包是否是可用的:

// server.gopackage mainimport "github.com/codegangsta/martini"func main() {m := martini.Classic()m.Get("/", func() string {return "Hello world!"})m.Run()
}

在命令行中输入下面的命令运行上面的代码:

go run server.go

接下来我们就可以使用如下的网址访问我们的应用:

http://localhost:3000

说明:

  1. m := martini.Classic()创建一个典型的martini实例。
  2. m.Get("/", func() string { ... })接收对\的GET方法请求,第二个参数是对一请求的处理方法。
  3. m.Run()运行服务器。

API

(主要内容翻译自官方文档)

常量 下面的常量定义用于指定应用所处的环境:

const (Dev  string = "development"Prod string = "production"Test string = "test"
)

变量

我们使用如下的变量来控制应用所处的环境:

var Env = Dev

type BeforeFunc

BeforeFunc类型的方法在ResponseWriter方法被生效前调用。

type BeforeFunc func(ResponseWriter)

如:

BeforeFunc XXX(req ResponseWriter){// ...
}

type ClassicMartini

带有典型方法的Martini实例类型。

type ClassicMartini struct {*MartiniRouter
}

func Classic() *ClassicMartini

我们可以使用这个方法创建一个典型的Martini实例。然后我们就可以使用这个Martini实例来进行应用的管理:

func Classic() *ClassicMartini

type Context

Request请求的上下文内容。

type Context interface {inject.Injector// Next is an optional function that Middleware Handlers can call to yield the until after// the other Handlers have been executed. This works really well for any operations that must// happen after an http requestNext()// Written returns whether or not the response for this context has been written.Written() bool
}### type HandlerHandler可以是任意的方法,Marniti会尝试注入服务到Handler方法的参数列表中。如果不能成功注入的话,Marniti会panic。

type Handler interface{} ```

func Logger() Handler

Logger返回一个中间件处理器,用于记录request的请求输入与响应输出。

func Logger() Handler

func Recovery() Handler

Recovery返回一个中间件,用于修复错误并在可能的情况下返回一个500给客户端。在开发模式的时候,Recovery会将错误信息输出为HTML页面。

func Recovery() Handler

func Static(directory string, staticOpt ...StaticOptions) Handler

Static返回一个中间件处理器,用于服务给定目录的静态文件。

func Static(directory string, staticOpt ...StaticOptions) Handler

type Martini

Martini实例是整个Web应用的顶层。inject.Injector方法在全局层面上映射服务。

type Martini struct {inject.Injector// contains filtered or unexported fields
}

func New() *Martini

创建包含全部功能的Martini实例。

func New() *Martini

func (m *Martini) Action(handler Handler)

Action方法在所有的Martini中间件都被引入之后调用。在ClassicMartini中,是martini.Router。

func (m *Martini) Action(handler Handler)

func (m *Martini) Handlers(handlers ...Handler)

设置给定的Handler处理方法栈。当处理器中存在不可调用的方法的时候,会产生异常。

func (m *Martini) Handlers(handlers ...Handler)

func (m *Martini) Run()

获取http包中的server.Listening。默认使用os.GetEnv("PORT")或3000作为访问端口号.

func (m *Martini) Run()

func (m Martini) ServeHTTP(res http.ResponseWriter, req http.Request)

ServeHTTP是Martini实例的入口。一般用于控制HTTP服务器。

func (m *Martini) ServeHTTP(res http.ResponseWriter, req *http.Request)

func (m *Martini) Use(handler Handler)

将一个Handle处理方法添加到处理栈中。当处理方法不可用的时候会出现异常。

func (m *Martini) Use(handler Handler)

type Params

已命名路由的键值对映射。一个martini.Params可以被注入到任意的路由处理方法中。

type Params map[string]string

type ResponseWriter

ResponseWriter对http.ResponseWriter进行包装,它提供有关响应的扩展信息。如果以方法的形式调用,推荐使用这个中间件处理器来包装一个响应。

type ResponseWriter interface {http.ResponseWriterhttp.Flusher// Status returns the status code of the response or 0 if the response has not been written.Status() int// Written returns whether or not the ResponseWriter has been written.Written() bool// Size returns the size of the response body.Size() int// Before allows for a function to be called before the ResponseWriter has been written to. This is// useful for setting headers or any other operations that must happen before a response has been written.Before(BeforeFunc)
}

func NewResponseWriter(rw http.ResponseWriter) ResponseWriter

创建一个包装http.ResponseWriter的ResponseWriter类型实例。

func NewResponseWriter(rw http.ResponseWriter) ResponseWriter

type ReturnHandler

ReturnHandler是Martini提供的用于路由处理并返回内容的服务。ReturnHandler对于向基于值传递的ResponseWriter写入是可响应的。

type ReturnHandler func(Context, []reflect.Value)

type Route

Route是一个用于表示Martini路由层的接口。

type Route interface {// URLWith returns a rendering of the Route's url with the given string params.URLWith([]string) stringName(string)
}

type Router

Router是Martini的路由接口。提供HTTP变量、处理方法栈、依赖注入。

type Router interface {// Get adds a route for a HTTP GET request to the specified matching pattern.Get(string, ...Handler) Route// Patch adds a route for a HTTP PATCH request to the specified matching pattern.Patch(string, ...Handler) Route// Post adds a route for a HTTP POST request to the specified matching pattern.Post(string, ...Handler) Route// Put adds a route for a HTTP PUT request to the specified matching pattern.Put(string, ...Handler) Route// Delete adds a route for a HTTP DELETE request to the specified matching pattern.Delete(string, ...Handler) Route// Options adds a route for a HTTP OPTIONS request to the specified matching pattern.Options(string, ...Handler) Route// Head adds a route for a HTTP HEAD request to the specified matching pattern.Head(string, ...Handler) Route// Any adds a route for any HTTP method request to the specified matching pattern.Any(string, ...Handler) Route// NotFound sets the handlers that are called when a no route matches a request. Throws a basic 404 by default.NotFound(...Handler)// Handle is the entry point for routing. This is used as a martini.HandlerHandle(http.ResponseWriter, *http.Request, Context)
}

func NewRouter() Router

创建一个路由实例。

func NewRouter() Router

type Routes

Routes是Martini路由层的辅助服务。

type Routes interface {// URLFor returns a rendered URL for the given route. Optional params can be passed to fulfill named parameters in the route.URLFor(name string, params ...interface{}) string// MethodsFor returns an array of methods available for the pathMethodsFor(path string) []string
}

type StaticOptions

StaticOptions是一个为martini.Static中间件指定配置选项的结构体。

type StaticOptions struct {// Prefix is the optional prefix used to serve the static directory contentPrefix string// SkipLogging can be used to switch log messages to *log.logger off.SkipLogging bool// IndexFile defines which file to serve as index if it exists.IndexFile string
}

参考

  1. 官网
  2. @Github
  3. @GoDOC

转载于:https://www.cnblogs.com/sitemanager/p/3973907.html

『Golang』Martini框架入门相关推荐

  1. 『Scrapy』爬虫框架入门

    框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...

  2. Golang 的Gin框架入门教学

    学习Golang差不多有一个星期时间,开始自己做点小功能,练练手. Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter, 它提供了类似mar ...

  3. 『德不孤』Pytest框架 — 14、Pytest参数化

    文章目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 ...

  4. 『GoLang』协程与通道

    作为一门 21 世纪的语言,Go 原生支持应用之间的通信(网络,客户端和服务端,分布式计算)和程序的并发.程序可以在不同的处理器和计算机上同时执行不同的代码段.Go 语言为构建并发程序的基本代码块是 ...

  5. 『GoLang』string及其相关操作

    1. 字符串简介 双引号:字符串使用双引号括起来,其中的相关的转义字符将被替换 str := "Hello World! \n Hello Gopher! \n" 输出: Hell ...

  6. Kotlin从入门到『放弃』系列 视频教程

    https://github.com/enbandari/Kotlin-Tutorials 随着Kotlin越来越成熟稳定,我已经开始在生产环境中使用它.考虑到目前国内资料较少,近期我开始筹划录制一套 ...

  7. 以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』

    1.前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习 ...

  8. 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水

    简介:没用过爬虫,现在有门课正好需要我们去学,于是试了下.想从实践入手,因此,给自己提了个需求:『把微信公众号的授权管理页面的开白名单抓出来』.并没有什么难度,这是我第一次独立写 JavaScript ...

  9. 『网络安全』蜜罐到蜜网入门指南(一)蜜罐初识

    网络安全,重于泰山,人人有责! 蜜罐,是一种网络安全产品.本文作为<『网络安全』蜜罐到蜜网入门指南>系列的第一篇,从网络安全着手,由浅入深,逐步介绍,带大家初步认识蜜罐. 一.网络安全 如 ...

最新文章

  1. ref和out 传递参数(C#)
  2. java轻量级IOC框架Guice
  3. 从EXCEL文件将数据导入数据库的向导程序设计!
  4. jvm配置参数,查看大对象直接分配到老年代
  5. 两次结果的绝对差值_你知道电子天平的检定和检定结果的影响因素有哪些吗?...
  6. html设置窗口最小大小,调整HTML 5画布的大小以适应窗口
  7. linux用mame玩游戏,Ubuntu下用kxmame运行精彩的街机游戏
  8. Google 杀死了 160 个产品!
  9. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例
  10. 2018_09_25_参加医学人工智能大会的个人思考
  11. TCPIP详解三次握手和四次挥手
  12. 移远EC20 R2.0 AT指令拨号流程
  13. Redhat6.8安装docker环境
  14. Linux中PLSQL视频,PLSQL使用视频教程:PLSQL的使用方法
  15. 知识竞赛中如何按抢答器才能最先抢到
  16. iPhone没有收到iOS16最新版的推送,如何升级系统?
  17. 吉他调音软件 android,吉他调音器专业版
  18. java小球挡板游戏_多线程的一个小球游戏,就是以前的那个Pong游戏
  19. android标签云:LabelView
  20. python联网斗地主_Python斗地主

热门文章

  1. 算法导论笔记:06堆排序
  2. 对DataTable里数据进行排序
  3. Thinkphp小知识点
  4. UVA 10020 Minimal coverage
  5. Alpha Blending a Bitmap 失败 原因
  6. iw工具安装和使用 (修正版)
  7. kubernetes(k8s)使用声明式管理与 创建yaml模板文件
  8. 处女座与cf(思维题)
  9. 最新发布!《阿里云实时计算 Flink 版解决方案白皮书-2021版》开放下载
  10. “新内容 新交互”全球视频云创新挑战赛复赛启幕