适配器模式在Go中通过组合和接口隐式实现,以桥接不兼容接口;例如用LegacyLoggerAdapter包装LegacyLogger并实现Logger接口,或用EmailWriter将sendEmail函数适配为Writer接口。
适配器模式的核心是让两个不兼容的接口能一起工作——Golang 没有继承,但通过组合和接口隐式实现,实现起来更轻量、更自然。
先明确谁需要被适配、谁是调用方。例如:
LegacyLogger 只有 LogError(msg string) 方法;Logger 接口:Log(level string, msg string)。二者方法签名不匹配,无法直接传入。这时就需要一个适配器桥接。
Golang 中最常用的方式是定义一个新结构体,内嵌旧类型,并实现目标接口:
type LegacyLogger struct{}
func (l *LegacyLogger) LogError(msg string) {
fmt.Println("[ERROR]", msg)
}
// 目标接口
type Logger interface {
Log(level string, msg string)
}
// 适配器:包装 LegacyLogger,实现 Logger 接口
type LegacyLoggerAdapter struct {
*LegacyLogger // 组合复用
}
func (a *LegacyLoggerAdapter) Log(level string, msg string) {
if level == "error" {
a.LogError(msg) // 转发到原有逻辑
} else {
fmt.Printf("[%s] %s\n", strings.ToUpper(level), msg)
}
}
调用时只需传入 &LegacyLoggerAdapter{&LegacyLogger{}},即可满足 Logger 类型要求。
若旧能力是函数(如 func(string) error),而你需要它满足某个接口,可封装为闭包或适配函数:
type Writer interface {
Write([]byte) (int, error)
}
// 第三方函数:func(string) error
func sendEmail(content string) error { / ... / }
// 函数适配器:转成 Writer
type EmailWriter struct {
sendFunc func(string) error
}
func (e *EmailWriter) Write(p []byte) (int, error) {
err := e.sendFunc(string(p))
return len(p), err
}
// 使用
writer := &EmailWriter{sendEmail}
io.WriteString(writer, "Hello from adapter!")
Log() 而非 Log()/Debug()/Info()/Error(),降低适配成本。适配器不是万能胶,而是精准对接的桥梁——写清楚“谁适配谁”“怎么转译”,Golang 的接口机制会让它既清晰又可靠。
# go
# golang
# ai
# String
# 封装
# Error
# 结构体
# 继承
# 多继承
# 接口
# 闭包
# 而非
# 第三方
# 不兼容
# 桥接
# 隐式
# 已有
# 只需
# 会让
# 重写
# 不支持
相关文章:
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
网站微信制作软件,如何制作微信链接?
做企业网站制作流程,企业网站制作基本流程有哪些?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
如何用PHP快速搭建高效网站?分步指南
如何在阿里云香港服务器快速搭建网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站主机数据库如何配置才能提升网站性能?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
开封网站制作公司,网络用语开封是什么意思?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站主机系统SEO优化与智能配置核心关键词操作指南
名字制作网站免费,所有小说网站的名字?
,网站推广常用方法?
如何通过网站建站时间优化SEO与用户体验?
c# 在高并发场景下,委托和接口调用的性能对比
如何快速查询网站的真实建站时间?
seo网站制作优化,网站SEO优化步骤有哪些?
已有域名能否直接搭建网站?
定制建站价位费用解析与套餐推荐全攻略
历史网站制作软件,华为如何找回被删除的网站?
常州企业建站如何选择最佳模板?
贸易公司网站制作流程,出口贸易网站设计怎么做?
自助网站制作软件,个人如何自助建网站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何在万网自助建站中设置域名及备案?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
建站之星如何优化SEO以实现高效排名?
定制建站策划方案_专业建站与网站建设方案一站式指南
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
公众号网站制作网页,微信公众号怎么制作?
建站之星代理费用多少?最新价格详情介绍
如何通过主机屋免费建站教程十分钟搭建网站?
装修招标网站设计制作流程,装修招标流程?
活动邀请函制作网站有哪些,活动邀请函文案?
如何在阿里云部署织梦网站?
简单实现Android验证码
建站之星安装失败:服务器环境不兼容?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何在宝塔面板中修改默认建站目录?
如何通过多用户协作模板快速搭建高效企业网站?
小建面朝正北,A点实际方位是否存在偏差?
C#怎么使用委托和事件 C# delegate与event编程方法
如何选购建站域名与空间?自助平台全解析
nginx修改上传文件大小限制的方法
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
*请认真填写需求信息,我们会在24小时内与您取得联系。