(本文为转载,原文:Beego学习笔记——开始)css
beego是一个快速开发Go应用的http框架,他能够用来快速开发API、Web、后端服务等各类应用,是一个RESTFul的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,可是结合了Go自己的一些特性(interface、struct继承等)而设计的一个框架。flask
beego的总体设计架构以下所示:后端
beego是基于八大独立的模块之上构建的,是一个高度解耦的框架。当初设计beego的时候就是考虑功能模块化,用户即便不适用beego的http逻辑,也是能够在使用这些独立模块,例如你可使用cache模块来作你的缓存逻辑,使用日志模块来记录你的操做信息,使用config模块来解析你各类格式的文件,因此不单单在beego开发中,你的socket游戏开发中也是颇有用的模块,这也是beego为何受欢迎的一个缘由。你们若是玩过乐高的话,应该知道不少高级的东西都是一块一块的积木搭建出来的,而设计beego的时候,这些模块就是积木,高级机器人就是beego。至于这些模块的功能以及如何使用会在后面的文档会逐一介绍。缓存
既然beego是基于这些模块构建的,那么他的执行逻辑是怎么样的呢?beego是一个典型的MVC架构,他的执行逻辑以下图所示:架构
通常的beego项目的目录以下所示:app
├── conf │ └── app.conf ├── controllers │ ├── admin │ └── default.go ├── main.go ├── models │ └── models.go ├── static │ ├── css │ ├── ico │ ├── img │ └── js └── views ├── admin └── index.tpl
从上面的目录结构咱们能够看出来M(models目录)、V(views目录)、C(controllers目录)的结构,main.go
是入口文件。框架
package main import "fmt" func main() { fmt.Println("beego test") }
func Help(args []string)int{ fmt.Println(`Command: help(h) `) return 0 }
func main() { r := bufio.NewReader(os.Stdin) fmt.Print("Command> ") b, _, _ := r.ReadLine() line := string(b) tokens := strings.Split(line, " ") fmt.Println(tokens) }
运行的结果以下图,其中红色框内是本身手输的内容。
func GetCommandHandlers() map[string]func(args []string) int { return map[string]func([]string) int{ "help": Help, "h": Help, } }
func main() { r := bufio.NewReader(os.Stdin) handlers := GetCommandHandlers() Help(nil) for { fmt.Print("Command> ") b, _, _ := r.ReadLine() line := string(b) tokens := strings.Split(line, " ") if handler, ok := handlers[tokens[0]]; ok{ ret := handler(tokens) if ret != 0{ break } }else { fmt.Println("Unknown Command:", tokens[0]) } } }
package main import ( "bufio" "fmt" "os" "strings" ) func main() { r := bufio.NewReader(os.Stdin) handlers := GetCommandHandlers() Help(nil) for { fmt.Print("Command> ") b, _, _ := r.ReadLine() line := string(b) tokens := strings.Split(line, " ") if handler, ok := handlers[tokens[0]]; ok{ ret := handler(tokens) if ret != 0{ break } }else { fmt.Println("Unknown Command:", tokens[0]) } } } func GetCommandHandlers() map[string]func(args []string) int { return map[string]func([]string) int{ "help": Help, "h": Help, "quit" : Quit, "q":Quit, } } func Help(args []string) int { fmt.Println(`Command: help(h) quit(q) `) return 0 } func Quit(args []string) int{ return 1 }
运行结果以下: