本文介紹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
(主要內容翻譯自官方文檔)app
常量 下面的常量定義用於指定應用所處的環境:框架
const ( Dev string = "development" Prod string = "production" Test string = "test" )
咱們使用以下的變量來控制應用所處的環境:模塊化
var Env = Dev
BeforeFunc類型的方法在ResponseWriter方法被生效前調用。測試
type BeforeFunc func(ResponseWriter)
如:this
BeforeFunc XXX(req ResponseWriter){ // ... }
帶有典型方法的Martini實例類型。
type ClassicMartini struct { *Martini Router }
咱們可使用這個方法建立一個典型的Martini實例。而後咱們就可使用這個Martini實例來進行應用的管理:
func Classic() *ClassicMartini
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{} ```
Logger返回一箇中間件處理器,用於記錄request的請求輸入與響應輸出。
func Logger() Handler
Recovery返回一箇中間件,用於修復錯誤並在可能的狀況下返回一個500給客戶端。在開發模式的時候,Recovery會將錯誤信息輸出爲HTML頁面。
func Recovery() Handler
Static返回一箇中間件處理器,用於服務給定目錄的靜態文件。
func Static(directory string, staticOpt ...StaticOptions) Handler
Martini實例是整個Web應用的頂層。inject.Injector方法在全局層面上映射服務。
type Martini struct { inject.Injector // contains filtered or unexported fields }
建立包含所有功能的Martini實例。
func New() *Martini
Action方法在全部的Martini中間件都被引入以後調用。在ClassicMartini中,是martini.Router。
func (m *Martini) Action(handler Handler)
設置給定的Handler處理方法棧。當處理器中存在不可調用的方法的時候,會產生異常。
func (m *Martini) Handlers(handlers ...Handler)
獲取http包中的server.Listening。默認使用os.GetEnv("PORT")或3000做爲訪問端口號.
func (m *Martini) Run()
ServeHTTP是Martini實例的入口。通常用於控制HTTP服務器。
func (m *Martini) ServeHTTP(res http.ResponseWriter, req *http.Request)
將一個Handle處理方法添加處處理棧中。當處理方法不可用的時候會出現異常。
func (m *Martini) Use(handler Handler)
已命名路由的鍵值對映射。一個martini.Params能夠被注入到任意的路由處理方法中。
type Params map[string]string
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) }
建立一個包裝http.ResponseWriter的ResponseWriter類型實例。
func NewResponseWriter(rw http.ResponseWriter) ResponseWriter
ReturnHandler是Martini提供的用於路由處理並返回內容的服務。ReturnHandler對於向基於值傳遞的ResponseWriter寫入是可響應的。
type ReturnHandler func(Context, []reflect.Value)
Route是一個用於表示Martini路由層的接口。
type Route interface { // URLWith returns a rendering of the Route's url with the given string params. URLWith([]string) string Name(string) }
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
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 }
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 }