智一面王老师说运维浅谈:

不论多么先进的框架,mvc思想都是值得借鉴的, mvc是模型(model)-视图(view)-控制器(controller)的缩写,他是一种软件设计典范,他用业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,这样做有巨大的好处,他在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。本章节重点阐述controller层.
 

5.1 控制器定义

控制器文件通常放在controller目录下,控制器struct名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。

一个典型的控制器类定义如下:

/PageController.go
package controller

import (
   "restgo/restgo"
   "github.com/gin-gonic/gin"
   "net/http"
   "fmt"
)

type PageController struct {
   restgo.Controller
}
//前置操作
func (ctrl *PageController)before() gin.HandlerFunc {
   return func(ctx *gin.Context) {
      uri := ctx.Request.RequestURI
      fmt.Print(uri)
      if 1==1{
         ctx.Next()
      }
      return
   }
}

func (ctrl *PageController)Router(router *gin.Engine){
   router.GET("/",ctrl.showIndex)
   r := router.Group("page").Use(ctrl.before())
   r.POST("create",ctrl.create)
   r.POST("update",ctrl.update)
   r.POST("query",ctrl.query)
   r.POST("delete",ctrl.delete)
   r.POST("findOne",ctrl.findOne)

}

func (ctrl * PageController) create(ctx *gin.Context){
   ctrl.Data = []int{1,2,3}
   ctrl.AjaxData(ctx)
}
func (ctrl * PageController) showIndex(ctx *gin.Context){
   
   ctx.HTML(http.StatusOK,"panel/index.html","")
}
func (ctrl *PageController)delete(ctx *gin.Context){


}
func (ctrl *PageController)update(ctx *gin.Context){


}
func (ctrl *PageController)query(ctx *gin.Context){


}

func (ctrl *PageController)findOne(ctx *gin.Context){


}

 

控制器文件分为四部分

l struct定义部分,一般我们让控制器和restgo.Controller拥有同样的方法即可。restgo.Controller没有做很重的封装,只实现简单的数据响应接口。大家可以自行封装。

l 前置操作before部分,这一部分主要实现前置操作,当一个控制器里面的方法被访问时,需要进行特别的一些数据处理,比如鉴权,或者参数校验,可以在这个方法里面进行操作,前置操作逻辑不宜太复杂。

l  路由控制函数router,这个函数是必须实现的方法,我们需要在该函数中实现路由配置和映射

业务函数实现,主要通过函数实现,一个控制器通常实现fineOne/query/create/update方法。
 

智一面王老师说运维推荐初级Golang开发工程师在线评测:http://www.gtalent.cn/exam/interview/FM2N7xj54dQBPfUE

王老师说运维之go语言菜鸟入门:http://www.codeforest.cn/course/474