代理模式通过代理结构体控制对真实服务的访问,示例中定义Service接口及其实现RealService,ProxyService在DoWork前检查role权限,仅admin可执行操作,guest则被拒绝,从而实现权限校验逻辑与业务分离。

在 Go 语言中,代理模式(Proxy Pattern)常用于控制对真实对象的访问,特别适合实现权限校验、日志记录、缓存等横切逻辑。下面通过一个简单的权限控制示例,展示如何使用代理模式来限制对某个服务方法的调用。
定义服务接口
我们先定义一个通用的服务接口,表示需要被代理的目标对象:
type Service interface { DoWork() string}
这个接口只有一个方法 DoWork,代表某个受保护的操作。
实现真实服务对象
这是实际处理业务逻辑的结构体:
立即学习“go语言免费学习笔记(深入)”;
type RealService struct{}func (r *RealService) DoWork() string { return "工作已完成"}
RealService 实现了 Service 接口,执行真正的业务操作。
创建代理并加入权限控制
代理结构体持有真实服务的引用,并在调用前进行权限判断:
Shakker
多功能AI图像生成和编辑平台
103 查看详情
type ProxyService struct { realService *RealService role string // 用户角色,如 "admin" 或 "guest"}func (p *ProxyService) DoWork() string { if p.role != "admin" { return "拒绝访问:权限不足" } return p.realService.DoWork()}
代理在调用 DoWork 前检查用户角色,只有 admin 才能执行真实操作。
使用示例
下面是完整调用过程:
func main() { real := &RealService{} // 模拟管理员访问 proxyAdmin := &ProxyService{realService: real, role: "admin"} fmt.Println(proxyAdmin.DoWork()) // 输出:工作已完成 // 模拟普通用户访问 proxyGuest := &ProxyService{realService: real, role: "guest"} fmt.Println(proxyGuest.DoWork()) // 输出:拒绝访问:权限不足}
通过改变代理中的 role 字段,可以动态控制访问权限,而无需修改真实服务逻辑。
这种结构使得权限控制与业务逻辑解耦,便于扩展和维护。你也可以在此基础上增加日志、计数、延迟加载等功能。
基本上就这些,代理模式在权限场景下非常实用,代码清晰且易于测试。
以上就是Golang Proxy代理模式权限控制示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134089.html
微信扫一扫
支付宝扫一扫

