参考官方文档:https://beego.me/docs/quickstart/
安装beego及bee工具(需要安装Git)
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
命令执行完成之后,会在GoPath下生成目录及文件(GoPath主要放置第三方依赖)
在环境变量中可以看到位置:
创建项目测试:
进入GoPath下的src目录
bee new Hello
cd Hello
bee run
访问localhost:8080
集成到Goland
进入GoPath目录下,将创建的项目文件用Goland打开
运行快捷键 Ctrl+Shift + F10
main.go源文件
package main
import (
_ "TestProject/routers"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
其中_ "TestProject/routers"控制路由
在routers目录下有一个router.go
代码如下
package routers
import (
"TestProject/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
}
其中beego.Router()函数执行了路由注册
这个函数的功能是映射 URL 到 controller
例如:
beego.Router("/", &controllers.MainController{})
就是/映射到MainController
同理,类似的路由注册方式
beego.Router("/user", &controllers.UserController{})
/user 映射到UserController
解析配置文件
beego 会自动解析在 conf 目录下面的配置文件 app.conf
,通过修改配置文件相关的属性,我们可以定义:开启的端口,是否开启 session,应用名称等信息。
执行用户的 hookfunc
beego 会执行用户注册的 hookfunc,默认的已经存在了注册 mime,用户可以通过函数 AddAPPStartHook
注册自己的启动函数。
是否开启 session
会根据上面配置文件的分析之后判断是否开启 session,如果开启的话就初始化全局的 session。
是否编译模板
beego 会在启动的时候根据配置把 views 目录下的所有模板进行预编译,然后存在 map 里面,这样可以有效的提高模板运行的效率,无需进行多次编译。
是否开启文档功能
根据 EnableDocs 配置判断是否开启内置的文档路由功能
是否启动管理模块
beego 目前做了一个很酷的模块,应用内监控模块,会在 8088 端口做一个内部监听,我们可以通过这个端口查询到 QPS、CPU、内存、GC、goroutine、thread 等统计信息。
监听服务端口
这是最后一步也就是我们看到的访问 8080 看到的网页端口,内部其实调用了 ListenAndServe
,充分利用了 goroutine 的优势
controllers包下的default.go代码如下
package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
上面的代码显示首先声明了一个控制器 MainController
,控制器里面内嵌了 beego.Controller
,这就是 Go 的嵌入方式,也就是 MainController
自动拥有了所有 beego.Controller
的方法。
而 beego.Controller
拥有很多方法,其中包括 Init
、Prepare
、Post
、Get
、Delete
、Head
等方法。
上述代码重写了Get方法,同样也可以重写其他方法实现自定义的功能。
Get方法里面的代码是URL请求映射后需要执行的逻辑,这里只是简单的输出数据,我们可以通过各种方式获取数据,然后赋值到 this.Data
中,这是一个用来存储输出数据的 map,可以赋值任意类型的值,这里我们只是简单举例输出两个字符串。
最后一个就是需要去渲染的模板,this.TplName
就是需要渲染的模板,这里指定了 index.tpl
,如果用户不设置该参数,那么默认会去到模板目录的 Controller/<方法名>.tpl
查找,例如上面的方法会去 maincontroller/get.tpl
*(文件、文件夹必须小写)*。
用户设置了模板之后系统会自动的调用 Render
函数(这个函数是在 beego.Controller 中实现的),所以无需用户自己来调用渲染。
当然也可以不使用模版,直接用 this.Ctx.WriteString
输出字符串,如:
func (this *MainController) Get() {
this.Ctx.WriteString("hello")
}
原文:https://www.cnblogs.com/noneplus/p/12196666.html