当前位置:

首页 > 编程开发 > Golang数据访问对象模式实现与应用

Golang数据访问对象模式实现与应用

DAO模式在Go中非必需,但利于隔离数据逻辑、切换数据源和单元测试;接口应窄,仅暴露必要操作;SQL层用database/sql原生API;事务由service控制;错误需精准分类。

DAO模式在Go中非必需,但利于隔离数据逻辑、切换数据源和单元测试;接口应窄,仅暴露必要操作;SQL层用database/sql原生API;事务由service控制;错误需精准分类。

如何在Golang中实现数据访问对象模式_Golang数据访问模式设计与应用

DAO 模式在 Go 里不是必须的,但当你需要隔离数据逻辑、支持多数据源切换或做单元测试时,它确实能帮你把 db.Query 和业务逻辑剥离开——关键是别把它做成 Java 风格的抽象工厂套娃。

DAO 接口定义要窄,只暴露业务真正需要的操作

别一上来就定义 Save、UpdateByID、FindAllPaginated 这种大而全的接口。Go 的接口是隐式实现的,越小越灵活。比如用户模块只需要「按邮箱查」和「存新用户」:

type UserDAO interface {
    FindByEmail(email string) (*User, error)
    Create(u *User) (int64, error)
}

这样后续换数据库(PostgreSQL → SQLite)、加缓存层(加个 cacheUserDAO 包一层)或打桩测试都只需实现这两个方法,不会被冗余方法拖累。

SQL 执行层用 database/sql 原生 API,别封装死 sqlx 或 gorm

DAO 的实现体里直接用 db.QueryRow、db.Exec 等标准函数,好处是:

  • 不绑定 ORM,避免 gorm.Model(&u).Where("id = ?", id).First() 这类隐藏 SQL 行为
  • 错误处理更明确:你能区分 sql.ErrNoRows 和其他 error,而 GORM 的 RecordNotFound() 已被弃用且语义模糊
  • 参数绑定清晰:原生 db.Query("SELECT * FROM users WHERE email = $1", email) 比 ORM 的 struct tag 映射更可控

如果项目已用 sqlx,可以保留其 StructScan 辅助解包,但 DAO 接口本身仍面向原生 *sql.DB。

事务控制必须由上层(service)发起,DAO 不管 commit/rollback

DAO 方法签名里不要出现 tx *sql.Tx 参数——这会让 DAO 变成事务感知的,破坏可复用性。正确做法是让 service 拿到 *sql.Tx 后,传给 DAO 的构造函数:

type userDAO struct {
    db *sql.Tx // 或 *sql.DB,运行时决定
}
func NewUserDAO(db any) UserDAO {
    switch d := db.(type) {
    case *sql.Tx:
        return &userDAO{db: d}
    case *sql.DB:
        return &userDAO{db: d}
    }
}

这样同一个 DAO 实现既能跑在事务里也能跑在普通连接上,而 service 控制何时调 tx.Commit()。

最容易被忽略的是错误分类:DAO 方法返回的 error 必须能区分「数据不存在」、「唯一键冲突」、「连接超时」等场景,否则上层 service 根本没法做精准重试或提示。建议用 errors.Is(err, sql.ErrNoRows) 判断缺失,用自定义 error 类型包裹数据库特有错误码(如 PostgreSQL 的 23505 唯一键)。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
会声会影2024去除字幕导出后出现黑边解决
会声会影2024去除字幕导出后出现黑边解决

会声会影2024删除字幕后导出视频四周出现黑边?这通常不是软件故障,而是画面比例与项目设置不匹配。本文教你通过核对源视频比例、调整裁剪方式及统一输出尺寸,解决黑边问题,避免画面拉伸变形。

会声会影硬字幕和软字幕在会声会影区别讲解
会声会影硬字幕和软字幕在会声会影区别讲解

详解会声会影中软字幕(独立轨道)与硬字幕(内嵌像素)的区别。分析两者在修改、删除及导出后的不同表现,提供快速判断方法及处理建议,帮助剪辑者根据需求选择正确的字幕处理方式。

WPS 表格日期格式乱了怎么修正
WPS 表格日期格式乱了怎么修正

解决WPS表格中日期变成数字、格式不统一或无法排序的问题。通过识别底层数据类型,使用单元格格式、分列工具和排序验证,快速将文本或错误格式转换为标准日期。

哔哩哔哩PC客户端视频加载卡顿如何优化
哔哩哔哩PC客户端视频加载卡顿如何优化

哔哩哔哩PC客户端看视频转圈、画面停滞?本文详解如何通过降低画质、清理缓存、调整硬件解码及监控后台资源来优化播放性能,适用于Windows系统用户排查常见卡顿故障。

立刻MV进阶技巧:怎么调整画质参数与优化剪辑节奏
立刻MV进阶技巧:怎么调整画质参数与优化剪辑节奏

掌握立刻MV的高级设置技巧,学习如何根据发布场景调整画布与画质参数,并依据歌曲段落优化镜头切换节奏,生成清晰流畅且文件大小适中的音乐视频。

WPS 表格怎么单独锁定部分单元格
WPS 表格怎么单独锁定部分单元格

在WPS表格中,仅设置单元格格式无法防止修改。需通过取消全表锁定、指定区域锁定、开启工作表保护三步实现部分单元格防误改。本文解析具体操作逻辑及密码注意事项。

Windows10安装报错0x80300024解决办法
Windows10安装报错0x80300024解决办法

遇到 Windows 10 安装错误代码 0x80300024?不要急于格式化硬盘。本文详解如何通过断开多余设备、统一 UEFI 启动模式及检查安装介质来解决该问题,并提供安全处理分区的操作建议。

蛙蛙写作怎么区分正版与非正版安装包
蛙蛙写作怎么区分正版与非正版安装包

担心下载到假冒的蛙蛙写作?本教程教你通过官方域名 wawawriter.com、App Store 开发者“杭州引力智航科技有限公司”及正规应用商店渠道,快速辨别正版安装包,保障账号与数据安全。

漫蛙2 Manwa2 官方正版功能详解与数据同步教程
漫蛙2 Manwa2 官方正版功能详解与数据同步教程

漫蛙2 Manwa2 (https://www.ao3cn.cc/)提供海量正版资源与无广告清爽体验。针对多设备阅读断点、离线缓存及画质需求,本文详解其横竖屏切换、智能推荐及高清显示功能,并逐步指导用户通过账号登录与书架设置完成阅读进度同步,确保在Android设备上获得流畅、舒适的追更体验。

用音述AI分轨功能做采样(Sampling):打造你的Hip-Hop采样库
用音述AI分轨功能做采样(Sampling):打造你的Hip-Hop采样库

想提升Hip-Hop制作手感?利用音述AI的分轨功能,提取人声、鼓点和贝斯素材。本文详解从导出、剪辑到标签管理的完整流程,助你打造合规且实用的个人采样库。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
IntelliJ IDEA macOS版
IntelliJ IDEA macOS版
Mac

IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

PyCharm macOS版
PyCharm macOS版
Mac

JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

WebStorm macOS版
WebStorm macOS版
Mac

JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

WINDOWS 更多
IntelliJ IDEA Windows版
IntelliJ IDEA Windows版
Windows

JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

PhpStorm Windows版
PhpStorm Windows版
Windows

PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

PyCharm Windows版
PyCharm Windows版
Windows

PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,