智一面王老师说运维浅谈:
不论多么先进的框架,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