当前位置: 首页 > 科技观察

使用接口在Golang中编程有什么好处?

时间:2023-03-15 01:23:11 科技观察

01简介在Golang语言中,一个接口类型定义了一组方法签名,接口类型的值可以存储任何实现这些方法的值。Golang语言的接口是隐式实现的。与其他一些编程语言不同,implements关键字用于显式实现接口。Golang语言没有implements关键字。一个类型只要实现了接口定义的所有方法,就相当于实现了接口。Interface,所以又叫Ducktyping。如果某物看起来像鸭子,游泳像鸭子,叫声像鸭子,那么它很可能是鸭子。关于Golang语言接口的使用,我们在之前的文章中已经介绍过了,感兴趣的读者可以阅读。在本文中,我们介绍使用接口有哪些好处?02使用接口的好处在Golang语言中,我们使用结构和方法来完美满足需求。为什么要使用接口?实际上,接口是一种工具。我们是否选择使用接口取决于我们。它可以使我们的代码更加优雅、简洁、可读性更强。下面我们通过一个简单的例子来说明接口的这些好处。示例代码:typeCatstruct{}func(cCat)Say()string{return"miaow"}typeDogstruct{}func(dDog)Say()string{return"woofwoof"}funcTestSay(t*testing.T){c:=Cat{}t.Log("Catsay:",c.Say())d:=Dog{}t.Log("Dogsay:",d.Say())}阅读上面的代码,我们定义了两个结构体Cat和Dog,分别为它们实现Say方法。有没有读者觉得代码有点重复,因为Cat和Dog都有相同的签名方法Say,所以我们可以使用接口来重构这段代码。示例代码:typeSayerinterface{Say()string}typeCatstruct{}func(cCat)Say()string{return"miaow"}typeDogstruct{}func(dDog)Say()string{return"woofwoof"}typeHorsestruct{}func(hHorse)Say()string{return"neigh"}funcTestSay(t*testing.T){c:=Cat{}//t.Log("Catsay:",c.Say())//d:=Dog{}//t.Log("Dogsay:",d.Say())h:=Horse{}animals:=[]Sayer{c,d,h}for_,a:=rangeanimals{t.Log("say:",a.Say())}}看了上面的代码,我们定义了一个接口Sayer,它只有一个方法签名Say。我们新定义了一个结构Horse。与不使用接口的代码不同,我们不需要使用h.Say()来调用Horse结构体的Say方法。03接口编程案例在Golang语言项目开发中,为了更方便的操作MySQL,我们通常会选择开源的ORM,但是社区中的ORM较多,在项目后期可能会遇到更换ORM的需求。我们可以使用接口来尽量减少ORMs对业务代码的侵入,为以后更换ORM做准备。typeDBOrminterface{Insert(param...interface{})}typeXormDBstruct{db*xorm.Session}func(x*XormDB)Insert(param...interface{}){_,err:=x.db.Insert(param)iferr!=nil{log.Println(err)}}//typeGormDBstruct{//db*gorm.DB//////func(g*GormDB)Insert(param...interface{}){//g.db.Create(param)//}typeUserstruct{ormDBOrmIdint64Namestring}func(u*User)DB()DBOrm{u.orm=new(XormDB)//数据库实例注入接口//u.orm=new(GormDB)returnu.orm}funcTestOrm(t*testing.T){user1:=new(User)user1.Name="lucy"user1.DB().Insert(user1)}阅读上面的代码,我们创建了一个DBOrm创建的接口两个ORM结构,分别实现接口DBOrm的签名方法。在业务结构User中,它包含的不是ORM结构,而是DBOrm接口。04小结本文主要介绍为什么要使用接口以及在Golang语言项目开发中使用接口的好处,并通过示例代码证明接口的好处。最后通过使用接口调用ORM的案例,在实际项目开发中介绍了接口给项目开发带来的好处。