首页 > 后端开发 > Golang > 正文

如何在Golang中应用代理模式_控制对对象的访问和操作

P粉602998670
发布: 2025-12-17 16:30:08
原创
533人浏览过
Go中代理模式通过接口和组合实现,代理与真实对象实现同一接口,支持权限校验、懒加载、缓存及链式代理,调用方无感知。

如何在golang中应用代理模式_控制对对象的访问和操作

在 Go 语言中,代理模式(Proxy Pattern)不依赖语言特性(如继承或多态),而是通过组合和接口来实现——核心是定义统一接口,让代理对象和真实对象都实现它,从而在不改变调用方代码的前提下,透明地控制对真实对象的访问、延迟初始化、权限校验、日志记录或缓存等操作。

定义统一接口,解耦调用方与实现

代理模式的前提是抽象出行为契约。例如,假设我们有一个资源加载器,需要控制对敏感文件的访问:

  • 先定义 Loader 接口:func Load(path string) ([]byte, error)
  • 真实对象 RealLoader 直接读取文件并返回内容
  • 代理对象 AuthProxyLoader 持有 RealLoader 实例,并在调用 Load 前检查权限

实现带访问控制的代理

以下是一个权限校验代理示例:

type Loader interface {
    Load(path string) ([]byte, error)
}

type RealLoader struct{}

func (r RealLoader) Load(path string) ([]byte, error) {
    return os.ReadFile(path)
}

type AuthProxyLoader struct {
    loader Loader
    user   string
}

func (p AuthProxyLoader) Load(path string) ([]byte, error) {
    if !p.canAccess(path) {
        return nil, fmt.Errorf("access denied for %s", path)
    }
    return p.loader.Load(path)
}

func (p AuthProxyLoader) canAccess(path string) bool {
    // 简单策略:管理员可访问所有路径,普通用户仅限 /public/
    return p.user == "admin" || strings.HasPrefix(path, "/public/")
}
登录后复制

使用时只需传入 AuthProxyLoader 实例,调用方完全感知不到代理逻辑。

立即学习go语言免费学习笔记(深入)”;

Smile企业费用管理系统源码1.0
Smile企业费用管理系统源码1.0

一、源码特点企业费用管理系统,有权限分配,登陆验证,新增角色,发布公告等二、功能介绍1、js的兼容性有个地方不行(比如模块排序,那个时候也是雏鸟一只,写了一小撮,现在用jq应该好处理的吧,ie里面没问题,大家发挥吧)2、里面的菜单和对应菜单下面的目录项可以根据需求自己添加的,有对应模块3、可以根据自己设定的角色添加对应的访问页面4、有些操作涉及到按钮权限,对于这种思路,我粗粗的写了2个自定义控件,

Smile企业费用管理系统源码1.0 0
查看详情 Smile企业费用管理系统源码1.0

支持懒加载与缓存的代理

代理还可用于优化性能。比如图片加载器,首次加载后缓存结果:

  • 代理内部维护一个 map[string][]byte 缓存
  • 每次 Load 先查缓存,命中则直接返回;未命中则委托给真实加载器,并存入缓存
  • 注意并发安全:用 sync.RWMutex 保护读写

灵活组合多个代理(链式代理)

Go 的接口和组合天然适合构建代理链。例如:

  • LoggingProxy:记录每次调用耗时与参数
  • RateLimitProxy:限制单位时间调用次数
  • CacheProxy:提供本地响应缓存

它们可按需嵌套:LoggingProxy{RateLimitProxy{CacheProxy{RealLoader{}}}},每个只关注自身职责,符合单一职责原则。

以上就是如何在Golang中应用代理模式_控制对对象的访问和操作的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号