当前位置:首页 > 数据库

Golang 语言编程使用接口有哪些好处?

01介绍

在 Golang 语言中,语言有好接口类型定义了一组方法签名,编程接口类型的使用值可以保存实现了这些方法的任何值。

Golang 语言的接口接口是隐式实现的,它不像其他某些编程语言,语言有好使用 implements 关键字显式实现接口,编程Golang 语言没有 implements 关键字,使用一个类型只要实现接口定义的接口所有方法,就等于实现了该接口,语言有好所以也称为 Duck typing。编程

if something looks like a duck,使用 swims like a duck and quacks like a duck then it’s probably a duck.

关于 Golang 语言接口的使用,我们已经在前面的接口文章中介绍过,感兴趣的语言有好读者朋友可以翻阅一下。本文我们介绍一下使用接口有哪些好处?编程

02使用接口的好处

在 Golang 语言中,我们使用结构体和方法可以很完美的使用实现需求。为什么还要使用接口呢?实际上,接口是一个工具,是否选择使用接口,云服务器取决于我们自己,它可以使我们的代码更优雅,更简洁,更具可读性。下面我们通过一个简单示例来说明接口的这些好处。

示例代码:

type Cat struct {  } func (c Cat) Say() string {   return "miaow" } type Dog struct {  } func (d Dog) Say() string {   return "woof woof" } func TestSay(t *testing.T) {   c := Cat{ }  t.Log("Cat say:", c.Say())  d := Dog{ }  t.Log("Dog say:", d.Say()) } 

阅读上面这段代码,我们定义了两个结构体 Cat 和 Dog,并分别为其实现了 Say 方法。读者朋友们是否感觉到代码有些重复,因为 Cat 和 Dog 都有相同的签名的方法 Say,所以我们可以使用接口重构一下这段代码。

示例代码:

type Sayer interface {   Say() string } type Cat struct {  } func (c Cat) Say() string {   return "miaow" } type Dog struct {  } func (d Dog) Say() string {   return "woof woof" } type Horse struct {  } func (h Horse) Say() string {   return "neigh" } func TestSay(t *testing.T) {   c := Cat{ }  // t.Log("Cat say:", c.Say())  //  d := Dog{ }  // t.Log("Dog say:", d.Say())  h := Horse{ }  animals := []Sayer{ c, d, h}  for _, a := range animals {    t.Log("say:", a.Say())  } } 

阅读上面这段代码,我们定义了一个接口 Sayer,该接口只有一个方法签名 Say。并且我们又新定义了一个结构体 Horse,和未使用接口的代码不同的是,我们不需要使用 h.Say() 调用 Horse 结构体的 Say 方法。

03接口编程案例

在 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 DBOrm  Id int64  Name 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 接口。

04总结

本文我们主要介绍在 Golang 语言项目开发中,为什么使用接口,以及使用接口的好处,并通过示例代码证明接口带来的好处。

最后,通过使用接口调用 ORM 的案例,介绍在实际项目开发中,接口为项目开发带来的好处。

香港云服务器

分享到:

滇ICP备2023006006号-16