panic 苹果aop_Go Web开发之Revel - 拦截器

一个拦截器是一个框架在调用action方法前或后调用的函数. 它允许一种AOP的形式, 它经常被用于做下面几种事情:

Request logging

Error handling

Stats keeping

在Revel里, 一个拦截器能接受两种形式:

1. 函数拦截器: 一个函数满足

没有访问特定的应用程序Controller被调用

在应用程序中可以应用于任意或全部Controller

2. 方法拦截器:一个controller的方法接受没有参数和rev.Result的返回值

可以只拦截受约束的Controller

可以修改被调用的controller作为想得到的

拦截器按照被添加的顺序被调用.

拦截器次数

一个拦截器能在请求生命周期被注册并在4个点运行:

BEFORE: 在请求被路由, session,flash和参数反编码后, 但在action被调用前

AFTTER: 在请求已经返回一个Result后, 但在Result被应用之前. 如果aciton产生panic这些拦截器将不会被调用

PANIC: 一个panic退出一个action或提出应用返回Result后

FINALLY: 在一个action完成和Result被应用后

结果

拦截器典型的返回nil, 在这种情况下请求不用拦截器并继续处理.

返回非nil的效果 rev.Result依赖拦截器的调用.

BEFORE: 没有更深远的拦截器被调用, action也没有

AFTTER: 全部的拦截器都在运行

PANIC: 全部的拦截器都在运行

FINALLY: 全部的拦截器都在运行

在所有情况下, 任何返回的Result将代替任何目前的Result.

在BEFORE情况下, 无论如何, 返回的结果保证是最终结果, 当在AFTER情况下, 它可能是一个更进一步的拦截器可以发出它自己的Result.

例子

函数拦截器

这里有一个简单的示例定义和注册一个函数拦截器.

func checkUser(c *rev.Controller) rev.Result {if user := connected(c); user ==nil {

c.Flash.Error("Please log in first")returnc.Redirect(Application.Index)

}returnnil

}

func init() {

rev.InterceptFunc(checkUser, rev.BEFORE,&Hotels{})

}

方法拦截器

一个方法拦截器签名可以是两种形式中的一个:

func (c AppController) example() rev.Result

func (c*AppController) example() rev.Result

这是个相同的示例它只操作应用程序的controller

func (c Hotels) checkUser() rev.Result {if user := connected(c); user ==nil {

c.Flash.Error("Please log in first")returnc.Redirect(Application.Index)

}returnnil

}

func init() {

rev.InterceptMethod(checkUser, rev.BEFORE)

}

至此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kernel panic - not syncing: Attempted to kill init!是一种严重的内核错误,表示内核无法继续正常运行并试图终止init进程。修复这个问题的步骤如下: 1. 首先,尝试重启系统。如果问题仍然存在,进入控制台查看错误信息。\[1\] 2. 如果重启后仍然出现相同的错误,可以尝试进入单用户模式进行排查。在控制台重启后,按下任意键,然后按下"e"键。使用上下箭头选择第二个选项,再次按下"e"键。在末尾添加"1",然后按下Enter键,最后按下"b"键进入单用户模式。然而,如果单用户模式也无法进入并且错误仍然存在,需要尝试其他方法。\[2\] 3. 下一步是进入救援模式。挂载镜像并从光盘启动系统。按下上下箭头选择救援模式启动。进入救援模式后,使用chroot命令切换到根目录环境下,执行以下命令:chroot /mnt/sysimage。\[3\] 以上是修复Kernel panic - not syncing: Attempted to kill init!故障的一般步骤。然而,具体的修复方法可能因系统环境和具体情况而异。建议在进行修复之前,先备份重要数据,并参考相关文档或咨询专业人士以获取更准确的指导。 #### 引用[.reference_title] - *1* *2* *3* [Kernel panic – not syncing: Attempted to kill init!故障修复](https://blog.csdn.net/weixin_43770382/article/details/107686813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值