在 Golang 语言项目开发中,为了更加方便操作 MySQL,我们通常会选择开源 ORM,但是社区有很多 ORM,可能在项目后期会遇到更换 ORM 的需求,我们可以使用接口使 ORM 尽量少的侵入业务代码,为以后替换 ORM 做准备。type DBOrm interface {Insert(param ...interface{})
}type XormDB struct {db *xorm.Session
}
func (x *XormDB) Insert(param ...interface{}) {_, err := x.db.Insert(param)if err != nil {log.Println(err)}
}// type GormDB struct {//  db *gorm.DB
// }
//
// func (g *GormDB) Insert(param ...interface{}) {//  g.db.Create(param)
// }type User struct {orm DBOrmId int64Name string
}func (u *User) DB() DBOrm{u.orm = new(XormDB) // 数据库实例注入接口// u.orm = new(GormDB)return u.orm
}func TestOrm(t *testing.T) {user1 := new(User)user1.Name = "lucy"user1.DB().Insert(user1)
}
阅读上面这段代码,我们创建了一个接口 DBOrm,创建了两个 ORM 结构体,并分别实现了接口 DBOrm 的签名方法,在业务结构体 User 中,包含的不是某个 ORM 结构体,而是 DBOrm 接口。

ps:上面的代码摘自公众号:https://mp.weixin.qq.com/s/VANSVcLtCLC0gWmEsa8sFw
是golang接口编程的一个demo

可以看出这里借助了实现类与具体接口的关系,可以是大部分业务不依赖具体实现,但是实际上业务还是依赖具体接口的,需要修改业务代码u.orm = new(XormDB),这一步还是需要侵入业务代码的,如果想完全脱离手动可以使用wire等依赖自动管理依赖注入

golang 面向接口编程相关推荐

  1. Golang面向API编程-interface(接口)

    Golang面向API编程-interface(接口) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Golang并不是一种典型的面向对象编程(Object Oriented Pr ...

  2. golang与面向接口编程

    这节不阐述OOP的理念,从接口直接讲,需要一定的抽象思想,新手可以绕道 go里面的接口定义 Go语言不同于其他语言.在Go语言中,接口是自定义类型,用于指定一组一个或多个方法签名,并且该接口是抽象的, ...

  3. 【转】工厂模式面向接口编程

    为了实现更好的灵活性     应改面向接口编程.因此,应该面向接口提供工场.         比如,Cat,   Dog,   Mouse,都是4条腿会跑的动物.     因此,我们建立一个接口叫做F ...

  4. 黑马java教程是什么_Java教程:揭秘什么是面向接口编程

    先用一个案例来给大家说明一下面向接口编程. 案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标(Mo ...

  5. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...

  6. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程

    多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...

  7. Java 面向抽象编程和面向接口编程

    以下内容来自<Java 2实用教程>,主编:耿祥义.张跃平 鉴于面向抽象编程和面向接口编程思维培养的重要性,写此博客巩固. 面向抽象编程: 在设计程序时,经常会使用到abstract类,其 ...

  8. 为什么有人说面向对象编程就是面向接口编程?

    "面向对象编程就是面向接口编程" 这句话相信, 很多人都在网上见过, 装b利器. 我一开始也是这么想的, 那些装b者丢下这一句, 就没下文了. 首先, 我认为这句话是1个假命题. ...

  9. python面向接口编程_Python 中的面向接口编程

    前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...

最新文章

  1. 【bzoj3924】[Zjoi2015]幻想乡战略游戏 动态点分治
  2. 一文深入了解 Redis 内存模型,Redis 的快是有原因的!
  3. 并查集(压缩路径+按秩排序)
  4. 直播报名 | 官方解读NVIDIA黑科技:StyleGAN的架构与实现
  5. 2.5 Hive中外部表的讲解
  6. 快速傅里叶变换python_FFT快速傅里叶变换的python实现过程解析
  7. webservie报文格式
  8. 浅谈 Python 中的 __init__ 和 __new__
  9. android wifi 连不上手机助手,usb调试断断续续的很烦?试试adb wifi调试
  10. Eslint Standard Style语法规则
  11. python入门教程(非常详细)-菜鸟学Python入门教程大盘点|7个多月的心血总结
  12. matlab 纵坐标 科学计数法,echarts纵坐标使用科学计数法表示
  13. quartus仿真34:74161构成长度为10的序列发生器
  14. 【JSP课程设计(含源码)】宾馆客房管理系统(2021-7-2最新版)
  15. unity四种Text总结
  16. 一文搞懂鱼眼相机模型
  17. 初步中的初步了解DFS以及DFT
  18. 光伏mppt扰动观察法仿真,matlab2018a
  19. MT6757_MT6763_Brightness_CaseShare
  20. 如何在Windows端开启关闭MySQl数据库

热门文章

  1. Kafka常见痛点及优化方案
  2. Linux shell脚本调试
  3. ES2019 的新功能 flat()
  4. vuedraggable嵌套块拖拽_Vue 基于 vuedraggable 实现选中、拖拽、排序效果
  5. kingbase自带的驱动在哪_为什么别人家的广告语都能自带BUG?
  6. 设置mysql8的root可以远程访问
  7. Git Submodule新漏洞已修复
  8. Android Native C Log
  9. Android 解析JSON
  10. 协议编码分析 - ARP协议详解