前面十二章介绍了如何经过Go来开发Web应用,介绍了不少基础知识、开发工具和开发技巧,那么咱们这一章经过这些知识来实现一个简易的Web框架。经过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容;第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑;第三小节介绍处理逻辑,如何设计一个公共的controller,对象继承以后处理函数中如何处理response和request;第四小节介绍框架的一些辅助功能,例如日志处理、配置信息等;第五小节介绍如何基于Web框架实现一个博客,包括博文的发表、修改、删除、显示列表等操做。git
经过这么一个完整的项目例子,我指望可以让读者了解如何开发Web应用,如何搭建本身的目录结构,如何实现路由,如何实现MVC模式等各方面的开发内容。在框架盛行的今天,MVC也再也不是神话。常常听到不少程序员讨论哪一个框架好,哪一个框架很差, 其实框架只是工具,没有好与很差,只有适合与不适合,适合本身的就是最好的,因此教会你们本身动手写框架,那么不一样的需求均可以用本身的思路去实现。程序员
我以为这一章像是在将一个项目,认真学习项目,摘录就少一点····github
|——main.go 入口文件 |——conf 配置文件和处理模块 |——controllers 控制器入口 |——models 数据库处理模块 |——utils 辅助函数库 |——static 静态文件目录 |——views 视图库
目前几乎全部的Web应用路由实现都是基于http默认的路由器,可是Go自带的路由器有几个限制:golang
不支持参数设定,例如/user/:uid 这种泛类型匹配
没法很好的支持REST模式,没法限制访问的方法,例如上面的例子中,用户访问/foo,能够用GET、POST、DELETE、HEAD等方式访问
通常网站的路由规则太多了,编写繁琐。我前面本身开发了一个API应用,路由规则有三十几条,这种路由多了以后其实能够进一步简化,经过struct的方法进行一种简化
beego框架的路由器基于上面的几点限制考虑设计了一种REST方式的路由实现,路由设计也是基于上面Go默认设计的两点来考虑:存储路由和转发路由web
针对前面所说的限制点,咱们首先要解决参数支持就须要用到正则,第二和第三点咱们经过一种变通的方法来解决,REST的方法对应到struct的方法中去,而后路由到struct而不是函数,这样在转发路由的时候就能够根据method来执行不一样的方法。数据库
传统的MVC框架大多数是基于Action设计的后缀式映射,然而,如今Web流行REST风格的架构。尽管使用Filter或者rewrite可以经过URL重写实现REST风格的URL,可是为何不直接设计一个全新的REST风格的 MVC框架呢?本小节就是基于这种思路来说述如何从头设计一个基于REST风格的MVC框架中的controller,最大限度地简化Web应用的开发,甚至编写一行代码就能够实现“Hello, world”。设计模式
MVC设计模式是目前Web应用开发中最多见的架构模式,经过分离 Model(模型)、View(视图)和 Controller(控制器),能够更容易实现易于扩展的用户界面(UI)。Model指后台返回的数据;View指须要渲染的页面,一般是模板页面,渲染后的内容一般是HTML;Controller指Web开发人员编写的处理不一样URL的控制器,如前面小节讲述的路由就是URL请求转发到控制器的过程,controller在整个的MVC框架中起到了一个核心的做用,负责处理业务逻辑,所以控制器是整个框架中必不可少的一部分,Model和View对于有些业务需求是能够不写的,例如没有数据处理的逻辑处理,没有页面输出的302调整之类的就不须要Model和View,可是controller这一环节是必不可少的。服务器
日志和配置的重要性
前面已经介绍过日志在咱们程序开发中起着很重要的做用,经过日志咱们能够记录调试咱们的信息,当初介绍过一个日志系统seelog,根据不一样的level输出不一样的日志,这个对于程序开发和程序部署来讲相当重要。咱们能够在程序开发中设置level低一点,部署的时候把level设置高,这样咱们开发中的调试信息能够屏蔽掉。架构
配置模块对于应用部署牵涉到服务器不一样的一些配置信息很是有用,例如一些数据库配置信息、监听端口、监听地址等都是能够经过配置文件来配置,这样咱们的应用程序就具备很强的灵活性,能够经过配置文件的配置部署在不一样的机器上,能够链接不一样的数据库之类的。app
这一章咱们主要介绍了如何实现一个基础的Go语言框架,框架包含有路由设计,因为Go内置的http包中路由的一些不足点,咱们设计了动态路由规则,而后介绍了MVC模式中的Controller设计,controller实现了REST的实现,这个主要思路来源于tornado框架,而后设计实现了模板的layout以及自动化渲染等技术,主要采用了Go内置的模板引擎,最后咱们介绍了一些辅助的日志、配置等信息的设计,经过这些设计咱们实现了一个基础的框架beego,目前该框架已经开源在GitHub,最后咱们经过beego实现了一个博客系统,经过实例代码详细的展示了如何快速的开发一个站点。
终于完了,感受不是很理解,不过我大体理解了这种思想。