『Golang』Martini框架入門

本文介紹golang中的優秀web開發框架martini!git

Martini框架是使用Go語言做爲開發語言的一個強力的快速構建模塊化web應用與服務的開發框架。Martini是一個專門用來處理Web相關內容的框架,其並無自帶有關ORM或詳細的分層內容。因此當咱們使用Martini做爲咱們的開發框架時,咱們還須要選取適合的ORM等其餘包。github

安裝

go get github.com/codegangsta/martini

使用

咱們可使用以下的代碼來測試咱們安裝的包是不是可用的:golang

// server.go

package main

import "github.com/codegangsta/martini"

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

在命令行中輸入下面的命令運行上面的代碼:web

go run server.go

接下來咱們就可使用以下的網址訪問咱們的應用:服務器

http://localhost:3000

說明:

  1. m := martini.Classic()建立一個典型的martini實例。
  2. m.Get("/", func() string { ... })接收對\的GET方法請求,第二個參數是對一請求的處理方法。
  3. m.Run()運行服務器。

API

(主要內容翻譯自官方文檔)app

常量 下面的常量定義用於指定應用所處的環境:框架

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

變量

咱們使用以下的變量來控制應用所處的環境:模塊化

var Env = Dev

type BeforeFunc

BeforeFunc類型的方法在ResponseWriter方法被生效前調用。測試

type BeforeFunc func(ResponseWriter)

如:this

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

type ClassicMartini

帶有典型方法的Martini實例類型。

type ClassicMartini struct {
    *Martini
    Router
}

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 request
    Next()
    // Written returns whether or not the response for this context has been written.
    Written() bool
}

### type Handler

Handler能夠是任意的方法,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.ResponseWriter
    http.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) string
    Name(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.Handler
    Handle(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 path
    MethodsFor(path string) []string
}

type StaticOptions

StaticOptions是一個爲martini.Static中間件指定配置選項的結構體。

type StaticOptions struct {
    // Prefix is the optional prefix used to serve the static directory content
    Prefix 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
相關文章
相關標籤/搜索