适配器模式在Go中通过组合和接口嵌入实现,核心是让不兼容类型满足统一接口;定义目标接口Notifier和已有类型EmailSender/SMSSender,再创建EmailAdapter/SMSAdapter结构体桥接行为,最后统一调用Alert函数。

适配器模式的核心
是让不兼容的接口能一起工作——Golang 没有继承,但通过组合和接口嵌入,实现起来更轻量、更清晰。
先明确你希望统一对外暴露的接口(Target),再确认已有类型(Adaptee)的行为。比如:
适配器不是改造原有类型,而是新建一个结构体,内嵌或持有 Adaptee,并实现 Target 接口:
type EmailAdapter struct {
emailSender *EmailSender
}
func (e *EmailAdapter) Send(message string) {
e.emailSender.SendEmail("admin@example.com", message)
}
type SMSAdapter struct {
smsSender *SMSSender
}
func (s *SMSAdapter) Send(message string) {
s.smsSender.SendSMS("13800138000", message)
}
注意:适配器只负责“翻译”调用,不改变原逻辑。参数映射、默认值填充、错误转换等都在这里处理。
现在你可以把不同适配器当成同一类型传入业务逻辑:
微软爱写作
微软出品的免费英文写作/辅助/批改/评分工具
130
查看详情
func Alert(n Notifier, msg string) {
n.Send(msg) // 不关心背后是邮件还是短信
}
Alert(&EmailAdapter{&EmailSender{}}, "服务器宕机!")
Alert(&SMSAdapter{&SMSSender{}}, "服务器宕机!")
新增渠道(如 DingTalk、Webhook)只需写新适配器,不修改 Alert 或其他依赖 Notifier 的代码。
如果 Adaptee 是简单函数,可直接用闭包构造适配器,避免定义结构体:
func NewHTTPNotifier(client *http.Client, url string) Notifier {
return Notifier(func(msg string) {
http.Post(url, "text/plain", strings.NewReader(msg))
})
}
这种函数式适配器适合轻量集成,代码更紧凑,也符合 Go 的务实风格。
基本上就这些。Go 的适配器不靠继承靠组合,不靠抽象类靠接口,写起来干净,维护时也容易替换——关键在于分清谁是契约(接口)、谁是实现(具体类型)、谁是胶水(适配器)。
以上就是如何使用Golang实现适配器模式_使用Adapter Pattern兼容不同接口的详细内容,更多请关注其它相关文章!
相关文章:
快手网页版在线登录 快手网页版官网入口快速访问
新手怎么开始学化妆 零基础化妆入门教程
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
mcjs网页版在线存档 mcjs云存档登录入口
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
曝R星经典之作开发图 设计简陋但信息密集!
服务端验证_j*ascript输入检查
AO3最新镜像入口 Archive of Our Own官方平台访问
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
将HTML动态表格多行数据保存到Google Sheet的教程
快速CSGO开箱网站指南 CSGO开箱平台推荐
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
小米Civi 4录制视频过暗_小米Civi 4亮度优化
Go语言:非阻塞式判断标准输入(os.Stdin)是否有数据
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
J*aScript类型检查_j*ascript代码规范
J*aScript中向JSON对象添加新属性的正确姿势
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
PHP URL参数传递与500错误调试指南
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
PostgreSQL海量数据高效导入策略:Python与Django实践指南
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
QQ官网正版登录链接 QQ在线登录入口最新
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
mysql备份恢复性能优化_mysql备份恢复性能优化方法
163邮箱官方主页登录 直达网易邮箱登录核心页面
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
汽车之家官方网站官网入口_汽车之家网页版直接进入
抖音极速版最新版本 抖音极速版官方下载地址
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
Python多版本共存与虚拟环境管理深度指南
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
css链接悬停下划线样式如何自定义_使用::after结合content和transition
《刺客信条:影》PS5 Pro和Switch 2画面对比
Mac怎么锁定备忘录_Mac备忘录加密设置教程
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程