(本文爲轉載,原文: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 }
運行結果以下: