gweb總結之開篇

gweb並非一個web框架,而是本身整理的web腳手架?也不知道怎麼稱呼更爲合適,所以主要目的在於總結相關知識。其中用到了的第三方的包,能夠在項目的 vendor文件夾裏查閱。我也但願作成一個web框架,一邊總結一邊朝着這個方向邁進吧。

項目背景

最開始我一直都在用Python在寫web服務,至於python寫代碼是種什麼體驗,你們各有體會,當你習慣了使用python的表單解析校驗方式,再使用Golang來進行一樣的操做,對於剛開始接觸Golang的程序猿來講,簡直從天堂掉到了地獄。固然前提是,優雅的進行表單校驗。而不是像下面的例子:python

func Foo(w http.ResponseWriter req *http.Request) {
    req.ParseForm()
    bar := req.FormValue("bar")
    if bar == "" {
        // do some work
        io.WriteString(w, "param invalid")
    }
}

上面只是簡單舉個例子(手寫代碼,有錯請原諒)。git

因此咱們想要的是:只須要寫業務邏輯,定義表單和響應體。其餘的工做讓給另外的模塊來統一處理。這裏貼出最終的效果:github

// 定義表單
type HelloGetForm struct {
    Name string `schema:"name" valid:"Required" json:"name"`
    Age  int    `schema:"age" valid:"Required;Min(18)" json:"age"`
}

var PoolHelloGetForm = &sync.Pool{New: func() interface{} { return &HelloGetForm{} }}

// 定義響應體
type HelloGetResp struct {
    CodeInfo
    Tip string `json:"tip"`
}

var PoolHelloGetResp = &sync.Pool{New: func() interface{} { return &HelloGetResp{} }}

// 業務邏輯處理
func HelloGet(req *HelloGetForm) *HelloGetResp {
    resp := PoolHelloGetResp.Get().(*HelloGetResp)
    defer PoolHelloGetResp.Put(resp)

    resp.Tip = fmt.Sprintf("Get Hello, %s! your age[%d] is valid to access", req.Name, req.Age)

    // TODO: sleep over 10 *time.Second, test Response TimeOut
    time.Sleep(10 * time.Second)

    Response(resp, NewCodeInfo(CodeOk, ""))
    return resp
}

正式開篇

先貼上來用法demo,其中包含了Restful API的Method,還有Json格式數據的解析以及文件處理的示例:golang

  1. Get
  2. Post
  3. Put
  4. Delete [暫時沒有示例]
  5. JsonBody
  6. Files

後續

我會在最近放上gweb的各個模塊如:web

  • router/middleware/* & router/router 實現了統一解析,校驗和響應的模塊,也是最重要的部分
  • models 基本上就是orm的使用
  • mainC/servers Http Server & Rpc Server
  • controller 業務邏輯的的處理函數
  • logger 自帶的web logger
  • sh/Makefile 經過Makefile來打包部署golang程序

歡迎fork

github.com/yeqown/gwebjson

相關文章
相關標籤/搜索