写了多年的PHP,go刚出来时也了解过。过年时重新看了一些文档和文章,并着手用GO去写一个WEB开发框架,算是正式学习的加固。现在,框架已基本成型,在此想通过文字总结一下整个过程。 框架本身在稍后时间会上传至git,有兴趣的可关注下。
我需要一个什么样的框架?
由于长期写PHP,所以,自然是按PHP常见的开发方式来“定义”我的框架需求
- 动态规则路由
无需额外编写路由表,直接根椐请求的Path,通过反射,调用框架使用者编写的对应的Controller,比如: 访问 /Say 时,会调用 (this *Controller)Say() 方法
-
支持前置controll,在所有Controller执行前都会先被执行,类似基类
-
自动解释请求参数 包括GET,POST,COOKIE,上传文件等,框架使用者在自己编写的Controller方法可直接调用
func (this *Controller)Say(){
fmt.Printf("%s",this.Post)
fmt.Printf("%s",this.Cookie)
}
- response的封装,提供SetHeader,SetCookie,Render等方法
func (this *Controller)Say(){
this.SetHeader("A","aaa")
this.SetCookie("B","BB")
THIS.Render("a.tpl",data)
}
- 内置基于file/memcache的session支持,并支持自定义sessionHandler
func (this *Controller)Say(){
this.SessionStart()
this.SessionSet("a", "aaa")
for k, v := range this.Session {
fmt.Printf("k=%s,v=%v\n", k, v)
}
}
- 支持mysql/memcache的dao
func (this *Controller)Say(){
user:= this.NewMySQLDao("table")
user.Add(data)
user.Get(where)
}
- 支持静态文件服务,状态信息服务
- 其它util
日志处理,ini配置文件读取,Validator