gweb总结之开篇

gweb并不是一个web框架,而是自己整理的web脚手架?也不知道怎么称呼更为合适,因此主要目的在于总结相关知识。其中用到了的第三方的包,可以在项目的
vendor文件夹里查阅。我也希望做成一个web框架,一边总结一边朝着这个方向迈进吧。

项目背景

最开始我一直都在用Python在写web服务,至于python写代码是种什么体验,大家各有体会,当你习惯了使用python的表单解析校验方式,再使用Golang来进行同样的操作,对于刚开始接触Golang的程序猿来说,简直从天堂掉到了地狱。当然前提是,优雅的进行表单校验。而不是像下面的例子:

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

上面只是简单举个例子(手写代码,有错请原谅)。

所以我们想要的是:只需要写业务逻辑,定义表单和响应体。其他的工作让给另外的模块来统一处理。这里贴出最终的效果:

// 定义表单
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格式数据的解析以及文件处理的示例:

  1. Get
  2. Post
  3. Put
  4. Delete [暂时没有示例]
  5. JsonBody
  6. Files

后续

我会在最近放上gweb的各个模块如:

  • router/middleware/* & router/router 实现了统一解析,校验和响应的模块,也是最重要的部分
  • models 基本上就是orm的使用
  • mainC/servers Http Server & Rpc Server
  • controller 业务逻辑的的处理函数
  • logger 自带的web logger
  • sh/Makefile 通过Makefile来打包部署golang程序

欢迎fork

github.com/yeqown/gweb

    原文作者:yeqown
    原文地址: https://segmentfault.com/a/1190000014784037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞