8.1 接口,接口也是一种类型

你说的曾经没有我的故事 提交于 2019-11-30 12:27:44
package mainimport (   "errors"   "fmt")/*   接口:接口指定了一个方法集,这是实现模块化的强大方式。可以将接口视为方法集的蓝本,它描述了方法集中的所有方法,但没有实现他们。         接口多种方式的实现,就想多态。多态就是多种形式,它让接口能够有多种实现。   接口声明方式: type ... interface{ 多个签名(也就是函数名)}    接口的要求:只要实现了它指定的方法集,且函数签名正确无误就可以了。   接口也是一种类型,可作为参数传递给函数,因此可编写可中用于多个接口实现的函数。   比如:定义一个数据库接口,只要实现了满足接口的要求,就可以使用任何数据库,因此可以轻松地更换数据库。        数据库接口可以包含多个实现,这就引入了多态的概念   多态意味着多种形式,它让接口能够有多种实现。   比如下例子中的:接口机器人,有个开关方法PowerOn(), 下面结构体都是实现了这个机器人的方法。   理解成: 接口定义了方法, 下面方法指向某个结构体,函数名就是接口的签名,那么这个结构体就实现了这个接口,属于这个接口多态中的一种。*/type Robot interface{   PowerOn() error  //这个PowerOn叫做Robot的签名,一个签名就是一个定义的函数}type T850 struct{   Name string}func(a *T850)PowerOn()error{   return nil}type R2D2 struct{   Broken bool}func(r *R2D2)PowerOn()error{   if r.Broken{      return errors.New("R2D2 is broken ,this's open")   }else{      return nil   }}func Boot(r Robot)error{   return r.PowerOn()}func main(){      t:=T850{         Name:"The Terminator",      }      r:=R2D2{         Broken:true,      }      err:=Boot(&r)      if err !=nil{         fmt.Println(err)      }else{         fmt.Println("Robot is powered on!")      }      err=Boot(&t)      if err!=nil{         fmt.Println(err)      }else{         fmt.Println("Robot is powered on!")      }}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!