我有一个功能只能在特定条件下执行(例如角色=='管理员')。现在我用'if'声明。但它可能是条件数量很高的情况,并且'如果'长定义看起来不那么美观。
Go(或与Go框架相关)中的可用机制允许实现中间件概念(操作过滤器)?
例如,ASP.NET MVC允许这样做:转:如何使用中间件模式?
[MyFilter]
public ViewResult Index()
{
// Filter will be applied to this specific action method
}
所以,MyFilter()在单独的类中实现允许更好的代码的组合物和测试。
更新: 狂欢(用于转到web框架)提供类似的功能与 拦截器(功能是由框架BEFORE或之后动作调用调用):https://revel.github.io/manual/interceptors.html
动作过滤器的目标是什么?无论哪种方式,我都会拒绝,Go倾向于简单,这会让我感觉更加复杂。 –
动作过滤器是自定义属性,它提供了声明性方法来将控制前和动作后行为添加到控制器的方法中。非常好的解释(从ASP.NET MVC的角度)是在这里:http://www.codeproject.com/Articles/577776/Filters-and-Attributes-in-ASPNET-MVC – olptkn