一、模板引擎-模板配置
视图组件是GoFrame框架核心的组件之一,当然也支持非常方便的配置管理功能。
视图组件支持配置文件,当使用g.View(单例名称)获取View单例对象时,将会自动通过默认的配置管理对象获取对应的View配置。默认情况下会读取viewer.单例名称配置项,当该配置项不存在时,将会读取viewer配置项。
完整配置文件配置项及说明如下,其中配置项名称不区分大小写:
[viewer]
Paths=["/var/www/template"]# 模板文件搜索目录路径,建议使用绝对路径。默认为当前程序工作路径
DefaultFile="index.html"# 默认解析的模板引擎文件。默认为"index.html"
Delimiters=["${","}"]# 模板引擎变量分隔符号。默认为 ["{{", "}}"]
AutoEncode=false# 是否默认对变量内容进行XSS编码。默认为false
[viewer.Data]# 自定义的全局Key-Value键值对,将在模板解析中可被直接使用到
Key1="Value1"
Key2="Value2"
二、数据返回-JSON/XML
Response提供了对JSON/XML数据格式输出的原生支持,通过以下方法实现:
WriteJson* 方法用于返回JSON数据格式,参数为任意类型,可以为string、map、struct等等。返回的Content-Type为application/json。
WriteXml* 方法用于返回XML数据格式,参数为任意类型,可以为string、map、struct等等。返回的Content-Type为application/xml。
示例:
JSON:
_ = g.RequestFromCtx(ctx).Response.WriteJson(getMainineinfoListRes)
JSONP:需要注意使用JSONP协议时必须通过Query方式提供callback参数。
XML
三、数据返回-Exit控制
Exit, ExitAll与ExitHook
Exit: 仅退出当前执行的逻辑方法,不退出后续的请求流程,可用于替代return。
ExitAll: 强行中断当前执行流程,当前执行方法的后续逻辑以及后续所有的逻辑方法将不再执行,常用于权限控制。
ExitHook: 当路由匹配到多个HOOK方法时,默认是按照路由匹配优先级顺序执行HOOK方法。当在HOOK方法中调用ExitHook方法后,后续的HOOK方法将不会被继续执行,作用类似HOOK方法覆盖。
这三个退出函数仅在服务函数和HOOK事件回调函数中有效,无法控制中间件的执行流程。
四、ORM链式操作-事务处理
Model对象也可以通过TX事务对象创建,通过事务对象创建的Model对象与通过DB数据库对象创建的Model对象功能是一样的,只不过前者的所有操作都是基于事务,而当事务提交或者回滚后,对应的Model对象不能被继续使用,否则会返回错误。因为该TX对象不能被继续使用,一个事务对象仅对应于一个事务流程,Commit/Rollback后即结束。
示例1,通过Transaction
为方便事务操作,gdb提供了事务的闭包操作,通过Transaction方法实现,该方法定义如下:
func (db DB) Transaction(ctx context.Context, f func(ctx context.Context, tx *TX) error) (err error)
当给定的闭包方法返回的error为nil时,那么闭包执行结束后当前事务自动执行Commit提交操作;否则自动执行Rollback回滚操作。
示例2,通过TX链式操作
我们也可以在链式操作中通过TX方法切换绑定的事务对象。多次链式操作可以绑定同一个事务对象,在该事务对象中执行对应的链式操作。
五、打包为可执行文件
go build -o directcheck.exe directcheck.go