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
我會在最近放上gweb
的各個模塊如:web