image

前言:

最近開始深究Go的webframework martini.慢慢開始會寫更多的東西出來.

筆記:

以下敘述的方式,會根據我想要達成的目標依序紀錄一下:

  • [JSON] 解決martini JSON的資料解析(parse)
    • 不論是Martini或是 http.Request原本基本都會是使用JSON.Unmarshall來處理.
    • 這裏需要注意的是,跟當初在處理mongodb的資料一樣.變數的名稱不可以全部是小寫,但是json資料名稱需要全部都是小寫.
    • 如果不小心把變數名稱全部打成小寫,會無法正確的Unmarshall資料.
  

type Response2 struct {
    Page   int      `json:"page"`
    Fruits []string `json:"fruits"`
}

str := `{"page": 1, "fruits": ["apple", "peach"]}`
    res := &Response2{}
    json.Unmarshal([]byte(str), &res)
    fmt.Println(res)
    fmt.Println(res.Fruits[0])
  • [martini-render] 關於martini 顯示json的顯示部份.原本encoding/json能處理大部分的事情.但是要能完整顯示http status code 與json內容的話.我還是選擇了martini-contrib/render
  
    render.JSON(400, map[string]interface{}{"result": "success"})
  • [Martini map]接下來問題是,如何在各個martini handler中,去傳遞你要的變數或是如何把資料庫加入.
    • 原本是應該要直接使用martini.Use(DB()) 然後再去接 DB 的起始martini.handler即可.參考這裡
    • 但是想要做成可變動的資料庫格式(in-mem DB, mongodb 共存) 所以還是直接丟整個變數比較好.類似作法參考
  
var db SomeDB{} 
//將變數透過martini 傳到各個handler
m.Map(&db)
...


//新增一個變數參數就可以使用
func someHandler(params martini.Params, r render.Render, db *SomeDB) {
....
}

相關文章:


Evan

Attitude is everything