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