Golang Web框架 Tiny Go Web

Tiny Go Web (TGW)是一个很是简单的Web框架,甚至谈不上框架。TGW无心取代任何框架,TGW的诞生是由于做者在使用beego时有种挫败感,决定本身从新写一个适合本身网站用的(私人借书网,由于网站没有完成备案,暂时由托管在US的vps进行反向代理到ucloud主机,访问可能会有必定的延时),从构思到完成总共只花了一天时间,由于以为它已经够用了,就没有继续添加新的功能。html

项目地址:http://github.com/icattlecoder/tgwgit

Qiuck Start

> go get github.com/icattlecoder/tgw
> cd src/github.com/icattlecoder/tgw/example
> go build
> ./example

img

控制器

控制器实现自动路由注册,例若有如下的结构github


type Server struct { //成员由业务逻辑而定,如mgo的数据库链接信息等 } func NewServer( /*入参,例如从配置文件中读取*/) *Server { return &Server{} } //对应模板为index.html ,返回值data用于渲染模板 func (s *Server) Index() (data map[string]interface{}) { data = map[string]interface{}{} author := Author{ Name: "icattlecoder", Email: []string{"icattlecoder@gmail.com", "iwangming@hotmail.com"}, QQ: "405283013", Blog: "http://blog.segmentfault.com/icattlecoder", } data["author"] = author return } //因为没有json.html模板,可是却有data返回值,此data将以json字符串的格式返回 func (s *Server) Json() (data map[string]interface{}) { data = map[string]interface{}{} author := Author{ Name: "icattlecoder", Email: []string{"icattlecoder@gmail.com", "iwangming@hotmail.com"}, QQ: "405283013", Blog: "http://blog.segmentfault.com/icattlecoder", } data["author"] = author return } //这里根据请求自动解析出args //例如可将 /hello?msg=hello world的函数解析为TestArgs{Msg:"hello world"} //因为没有hello.html模板,而且没有返回值,能够经过env中的RW成员写入返回数据 func (s *Server) Hello(args TestArgs, env tgw.ReqEnv) { env.RW.Write([]byte(args.Msg)) err = env.Session.Set("key", args) if err != nil { log.Println(err) } } func (s *Server) AdminIndex(){}

如下是程序启动代码数据库

func main() {
    ser := controllers.NewServer()
    t:=tgw.NewTGW()
    log.Fatal(t.Register(&ser).Run(":8080"))
}

tgw的Register方法会自动注册如下的路由:json

/hello       ===> func (s *Server) Hello(args TestArgs, env tgw.ReqEnv)
/index       ===> func (s *Server) Index() (data map[string]interface{}) 
/Json        ===> func (s *Server) Json() (data map[string]interface{})
/admin/index ===> func (s *Server) AdminIndex()

localhost:8080/index的处理函数是service.Index,localhost:8080/admin/index的处理函数是service.AdminIndexsegmentfault

视图

视图默认放在view文件夹中,其文件名与url有关,例如:/index对应 view/index.html
若是某个url没有对应的视图,可是它的处理函数却有返回值,那么将返回对象JOSN序列化的结果。
视图中能够经过<include src="<src>" />指令包含其它文件,如公共头区域。session

参数解析

如下面的代码为例:框架

type TestArgs struct {
    Msg string
}
func (s *Server) Hello(args TestArgs, env tgw.ReqEnv)

对于请求localhost:8080/Hello?msg=Hello world,tgw将自动根据请求方法(POST或GET)识别并解析出TestArgs变量.
当前可以自动解析的类型有intstringboolfloat64memcached

扩展参数解析

tgw自带*Args参数解析,即结构名符合*Args的参数均可以自动解析。若是须要定制解析,实现Parser接口便可函数

Session支持

框架实现了一个简单的session管理,基本知足通常的需求,若是须要使用session,处理函数必须有一个类型为tgw.ReqEnv的参数,经过此函数可访问Session。另外,Session的值由memcached存储,所以实际运行时须要一个memecached服务。

自定义输出

若是函数包含类型为tgw.ReqEnv参数,且无返回值,能够直接向ReqEnv.RW中写入返回结果。

相关文章
相关标签/搜索