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!") }}
来源:https://www.cnblogs.com/iifeng/p/11586156.html