golang web框架设计6:上下文设计

golang web framework 框架系列文章:

context,翻译为上下文,为什么要设计这个结构?就是把http的请求和响应,以及参数结合在一起,便于集中处理信息,以后框架的扩展等。好多框架比如gin,都是有这个上下文结构。

context结构为

type Context struct {
    ResponseWriter http.ResponseWriter
    Request *http.Request
    Params  map[string]string
}

操作函数

func (ctx *Context) WriteString(content string) {
    ctx.ResponseWriter.Write([]byte(content))
}

func (ctx *Context) Abort(status int, body string) {
    ctx.ResponseWriter.WriteHeader(status)
    ctx.ResponseWriter.Write([]byte(body))
}

func (ctx *Context) Redirect(status int, url string) {
    ctx.ResponseWriter.Header().Set("Location", url)
    ctx.ResponseWriter.WriteHeader(status)
    ctx.ResponseWriter.Write([]byte("Redirecting to: " + url))
}

func (ctx *Context) NotFound(message string) {
    ctx.ResponseWriter.WriteHeader(404)
    ctx.ResponseWriter.Write([]byte(message))
}

func (ctx *Context) ContentType(ext string) {
    if !strings.HasPrefix(ext, ".") {
        ext = "." + ext
    }
    ctype := mime.TypeByExtension(ext)
    if ctype != "" {
        ctx.ResponseWriter.Header().Set("Content-Type", ctype)
    }
}

完整代码:

代码地址 context.go

posted @ 2019-11-19 23:08  九卷  阅读(972)  评论(0编辑  收藏  举报