Beego 安装
go get github.com/beego/bee#Beego工具Bee
go get github.com/astaxie/beego#Beego框架
创建应用
bee new projectName
特别注意,工程只能创建在gopath目录下启动应用
bee run
启动,默认8080端口beego基础路由 1.函数级别路由如下
beego.Get/Post/Put/Head/Options/Delete/Any(router, beego.FilterFunc)
2.Controller
beego.Router(router, controller)
type OjectController struct {
beego.Controller
}func (this *ObjectController) Get() {
obs := models.GetAll()
this.Data["json"] = obs
this.ServeJson()
}beego.Router("/object", &ObjectController{})
3.变量路由、正则路由
url参数可以从ctx.Input.Param读取
## 可以匹配request/value,:id为value值,value可为空。如果要value不为空,id后增加!(感叹号即可);可在括号后增加自定义正则表达式
beego.Router("request/:id", &controllers.RController{})
beego.Router("request/:id([0-9]+)", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN,参数在变量:all中
beego.Router("request/:all", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN.format,value1/.../valueN在变量path中,format在变量:ext中
beego.Router("request/*.*", &controllers.RController{})## beego特殊匹配,可以匹配request/value1/.../valueN,参数值在变量:splat中
beego.Router("request/*", &controllers.RController{})## beego特殊匹配,强制:id为int类型,还支持string
beego.Router("request/:id:int", &controllers.RController{})## beego特殊匹配,支持参数前后还有字符串常量
beego.Router("request/cms_:id([0-9]+).html", &controllers.RController{})
4.映射路由
即在某一路由规则的基础上按照某些条件额外将路由映射到当前Controller的其他方法
# 都好间隔多个HTTP请求类型,冒号后跟随方法名称,分号分隔多个规则
beego.Router("/api/interface", &RestController{}, "post,get:ExtraFuncName;
put,delete:ExtraFuncName2;
*:ExtraFuncName3")
5.自动化路由
beego自动路由会通过反射根据controller名字、方法名字自动路由,参数也会自动解析
# 假设ObjectController内有login方法,那么/object/login请求会自动被路由至该方法。同时/object/login/param1/param2/param3参数会被自动解析
beego.AutoRouter(&controllers.ObjectController{})
- 命名空间路由
树状,便于管理维护,且支持嵌套
beego.NewNameSpace("/v1").Filter("before", auth)
.Get("/notAllowed", func).Router("/test", func)
接口详解
NewNamespace(prefix string) // 返回ns对象
Cond(cond namespaceCond) // 满足条件才能被ns接纳
Filter(action string, filter FilterFunc) // action支持before、after,指在逻辑开始前、开始后进行过滤
参数配置
- AppName
默认是beego,new应用时指定
- AppPath
当前应用路径
- AppConfigPath
配置文件所在路径,默认是 AppPath下的conf/app.conf
- EnableHttpListen
是否启用HTTP监听,默认是true
- HttpAddr
应用监听地址,默认为空,监听所有网卡IP
- HttpPort
应用监听端口,默认8080
- 【Go Web基础--Beego框架】RnableHttpTLS
是否启用https端口,默认关闭
- HttpsPort
应用监听https端口,默认10443
- HttpCertFile
开启https之后,证书的路径
- HttpKeyFile
keyfile路径
- HttpServerTimeOut
http超时时间,默认0,永不超时
- RunMode
默认dev,出错会有有好的出错页面
- AutoRender
默认true,开启模板自动渲染。对于纯后台应用,应设置为false
- RecoverPanic
默认为true。应用异常panic时,会recover,不会导致进程退出
- ViewsPath
模板路径,默认views
- SessionOn
默认false,是否开启session
- SessionProvider
session引擎,默认memory,还支持file、cookie、redis、mysql。。。
- SessionName
客户端cookie名称,默认值beegosessionID
- SessionGCMaxLifetime
默认3600s超时
- SessionSavePath
file就是路径,redis、mysql就是链接地址
- SessionHashFunc
sessionID生成函数,默认sha1
- SessionHashKey
session hash的key
- SessionCookieLifeTime
session默认存在客户端cookie的时间,默认3600s
- UseFcgi
是否启用fastcgi,默认false
- MaxMemory
文件删除哦人内存缓存大小,默认值 64M
- EnableGzip
默认false
- DirectoryIndex
是否开启静态目录的列表显示,默认不显示
- BeegoServerName
beego server name,默认beego
- EnableAdmin
是否开启内存监控模块,默认关闭
- AdminHttpAddr
默认监控模块地址,默认localhost
- AdminHttpPort
监控程序端口,默认8088
- TemplateLeft、TemplateRight
默认{{、}}
- ErrorsShow
是否显示错误信息,默认显示
- StaticDir
静态路径,默认static
conf/app.conf中可以增加自定义的section与配置
[custom]
test = abc
在代码中
beego.AppConfig.String(“custom::test”)
控制器 控制器接口
type ControllerInterface interface {
Init(ct *context.Context, controllerName, actionName string, app interface{})
Prepare()
Get()
Post()
Delete()
Put()
Head()
Patch()
Options()
Finish()
Render() error
XsrfToken() string
CheckXsrfCookie() bool
}
控制器执行逻辑
- 匹配路由
- 执行 func init (不建议复写)
- 执行 func Prepare,执行用户自定义初始化
- 执行Action函数(Get、Post等,未实现默认返回403 )
- 执行 func Render,渲染模板(受Render开关控制)
- 执行 func Finish,执行用户自定义结束逻辑
- 结束
主要适用于form形式的数据处理
* GetString(key string) string
* GetStrings(key string) []string
* GetInt(key string) (int64, error)
* GetBool(key string) (bool, error)
* GetFloat(key string) (float64, error)
请求数据RequestBody
RequestBody默认会格式化为form形式,若需要获取requestbody中的json或者xml形式数据,需要配置copyrequestbody = true
文件上传处理
// 从form中获取名为key值的文件信息
GetFile(key string) (multipart.File, *multipart.FileHeader, error)// 将form中名为key值的文件信息存储到tofile中
SaveToFile(fromfile, tofile string) error
Session控制
默认Session引擎为memory,如果使用第三方依赖的引擎,需要额外引入,因为beego目前设计是微内核
SetSession(name string, value interface{})
GetSession(name string) interface{}
DelSession(name string)
SessionRegenerateID()
DestroySession()
数据输出
ServeJson()
ServeXml()
ServeJsonp()
ServeFormatted()
beego模板 beego.Controller 中的成员
TplName string
代表模板文件名称,默认在views目录下 Data map[string] interface{}
代表模板中模板数据模板数据用法
- 模板中读取元数据信息默认使用双括号,
{{.MetaParamName}}
- 关键字
// 条件判断
{{if .condition}}
{{else}}
{{end}}// 类似js with使用
{{with .object}}
{{.member}}
{{end}}// range读取切片或者数组
{{range .slice}}
{{.}}
{{end}}
模板变量用法
// 先创建并给一个模板变量赋值,然后打印
{{$tplVar := .DataInTpl}}
{{$tplVar}}
模板函数
用于简易数据处理,不需要再次额外交互后端服务器。go有部分内置,beego在此基础上又添加了一些,用户也可以自行注册
实例:
{{str2html .htmlInStr}}
管道
将htmlInStr的值传给下一个函数作为参数
{{.htmlInStr | htmlquote}}
模板嵌套
- 定义子模版
{{define "tplName"}}
template content
{{end}}
- 引用模板
{{template "tplName"}}
推荐阅读
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现
- Golang 数组和切片
- Go JSON编码与解码()
- golang map基础知识