是一個基于 Go 的微型 web 架構,其設計受到了 Sinatra 的啟發。
示例
一個簡單的
Hello World
package main
import (
"fmt"
"net/http"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"
)
func hello(c web.C, w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", c.URLParams["name"])
}
func main() {
goji.Get("/hello/:name", hello)
goji.Serve()
Goji 的代碼的
example
目錄下包含了一個
示例應用特性
- 相容
net/http
- URL 模式(同時支援 Sinatra 風格的
和 正規表達式)/foo/:bar
- 可再配置的中間件棧
- 自動支援 Einhorn 、 systemd
- 漸進停止,配合 Einhorn 可實作零下線時間的漸進重載
- Ruby on Rails / jQuery 風格的參數解析
理念
- 簡單。 Sinatra 風格,而不是 Rails 風格。沒有魔法。
- 可組合的。可與
組合,可以作為net/http
使用。http.Handler
- 自由。作者很喜歡 pat 。pat 以優雅的方式實作了 Sinatra 風格的路由,但是它不允許程式員在處理請求的過程中使用自己的線程狀态。而 Goji 則實作了任意上下文對象。