(本文为转载,原文:Beego学习笔记——开始)
beego简介
beego是一个快速开发Go应用的http框架,他可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,但是结合了Go本身的一些特性(interface、struct继承等)而设计的一个框架。
beego的架构
beego的整体设计架构如下所示:
beego是基于八大独立的模块之上构建的,是一个高度解耦的框架。当初设计beego的时候就是考虑功能模块化,用户即使不适用beego的http逻辑,也是可以在使用这些独立模块,例如你可以使用cache模块来做你的缓存逻辑,使用日志模块来记录你的操作信息,使用config模块来解析你各种格式的文件,所以不仅仅在beego开发中,你的socket游戏开发中也是很有用的模块,这也是beego为什么受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计beego的时候,这些模块就是积木,高级机器人就是beego。至于这些模块的功能以及如何使用会在后面的文档会逐一介绍。
beego的执行逻辑
既然beego是基于这些模块构建的,那么他的执行逻辑是怎么样的呢?beego是一个典型的MVC架构,他的执行逻辑如下图所示:
beego项目结构
一般的beego项目的目录如下所示:
├── 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
是入口文件。
以上是Beego官方文档对其的介绍,及其的组成部分。在后面的学习过程中,我会把8个基础模块拆开,撇开MVC,一部分一部分的学习。
package main import "fmt" func main() {
fmt.Println("beego test")
}
func Help(args []string)int{
fmt.Println(`Command:
help(h)
`)
return
}
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[]]; ok{
ret := handler(tokens)
if ret != {
break
}
}else {
fmt.Println("Unknown Command:", tokens[])
}
}
}
运行结果如下:
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[]]; ok{
ret := handler(tokens)
if ret != {
break
}
}else {
fmt.Println("Unknown Command:", tokens[])
}
}
} 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
} func Quit(args []string) int{
return
}
运行结果如下:
Beego学习笔记——开始的更多相关文章
-
Beego学习笔记——Logs
日志处理 这是一个用来处理日志的库,它的设计思路来自于database/sql,目前支持的引擎有file.console.net.smtp,可以通过如下方式进行安装: go get github.co ...
-
Beego学习笔记——Config
配置文件解析 这是一个用来解析文件的库,它的设计思路来自于database/sql,目前支持解析的文件格式有ini.json.xml.yaml,可以通过如下方式进行安装: go get github. ...
-
Beego学习笔记
Beego学习笔记 Go 路由(Controller) 路由就是根据用户的请求找到需要执行的函数或者controller. Get /v1/shop/nike ShopController Get D ...
-
Beego 学习笔记15:布局页面
页面布局 1> 一个html页面由:head部分,body部分,内部css,内部js,外联css,外联的js这几部分组成.因此,一个布局文件也就需要针对这些进行拆分. 2> ...
-
Beego 学习笔记14:Session控制
Session控制 1> Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2> Beego框架内置了 session 模块,目前 ...
-
beego学习笔记(4):开发文档阅读(6)
beego的响应流程: 1.监听的端口接收数据,默认是8080端口. 2.用户请求到达8080端口后,开始数据处理流程. 3.初始化CONTEXT对象.判断是否是WEBSOCKET请求,如果是,设置I ...
-
beego学习笔记(4):开发文档阅读(5)
controller的逻辑: 我们看下面的代码,就知道怎么传值的: import ( "github.com/astaxie/beego" ) type MainControlle ...
-
beego学习笔记(4):开发文档阅读(4)
beego.Run() 这个运行后, 1)解析配置文件,也就是conf目录下的. 2)判断是否开启session,并作相应的工作 3)执行用户的hookfunc. 4)是否编译模板 5)是否开启文档功 ...
-
beego学习笔记(4):开发文档阅读(3)
通过运行 bee new quickstart 来创建新的项目,其结构如下: quickstart |-- conf | `-- app.conf |-- controllers | `-- defa ...
随机推荐
-
SQL SERVER 通用分页存储过程,两种用法任你选
写在前面 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和 ...
-
Revolving Digits[EXKMP]
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
-
play framework学习笔记之 模板引擎
模板语法 ${client.name} ${client?.name} 不能确定client是否存在的时候? #{extends /} #{doLayout /}#{get} #{set} 比如 #{ ...
-
【Linux常识篇(1)】所谓的正向代理与反向代理
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连 ...
-
委托[delegate]_C#
委托(delegate): 委托声明定义了一种类型,它用一组特定的参数以及返回类型来封装方法.对于静态方法,委托对象封装要调用的方法.对于实例方法,委托对象同时封装一个实例和该实例上的一个方法.如果您 ...
-
ASP.NET MVC 数据分页思想及解决方案代码
作为一个程序猿,数据分页是每个人都会遇到的问题.解决方案更是琳琅满目,花样百出.但基本的思想都是差不多的. 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MV ...
-
Amazon才推众包物流,“京东众包”已红绿上阵,“达达”还手握10万配送大军
据外媒消息,Amazon正在开发一款App,想让大家都来为他家送包裹. Amazon的设想是,在市区招募实体零售商,租用空间或者按包裹向其支付费用.这项服务在内部代号为“On My Way”,目前还在 ...
-
WebGL 高级技术
1.如何实现雾化 实现雾化的方式由多种,这里使用最简单的一种:线性雾化(linear fog).在线性雾化中,某一点的雾化程度取决于它与视点之间的距离,距离越远雾化程度越高.线性雾化有起点和终点,起点 ...
-
PF2.1版本总结,在设计过程中遇到的问题以及技术分享
在距离上一次的版本发布已经过去4个月的时间,因为个人的能力以及时间有限,所以这次的版本会推迟这么久.可是无论怎样,PF2.1带着自身的完善总算不负所望推出.在这次的版本调整中让我深有体会到了程序设计中 ...
-
myeclipse一些快捷键 错了或者没说到补充下
Ctrl + 1 快速修复Ctrl + D 删除当前行 Ctrl + Alt + ↓ 复制当前行到下一行(复制增加)Ctrl + Alt + ↑ 复制当前行到上一行(复制增加)Alt + ↓ 当前行 ...