main.go:
package main
import "fmt"
type Book interface {//定义一个接口,里面有两个方法 fanshu() 和 bishu()
fanshu()
bishu()
}
type Book01 struct {//定义一个Book01类型的接口体,里面有一个Name属性(字段)
Name string
}
func (book01 Book01) fanshu(){//代表着book01就是一个Book类型的接口,因为它实现了fanshu()和bishu()的方法功能
fmt.Println("正在翻书中......~~~~")
}
func (book01 Book01) bishu(){
fmt.Println("正在闭书中......~~~~")
}
type Bookin struct {
}
func (bookin *Bookin) say(book Book){
book.fanshu()
book.bishu()
}
func main(){
book01 := Book01{"kobe"}
bookin := Bookin{}
bookin.say(book01)
}
运行结果是:
实现了接口的应用。
此时我把
这里的Book01类型前面加上*,也就是变成Book01指针类型,如下图:按照以往的时候,因为go语言底层会自从给我们加上&或者*,所以我们为了利用指针的高效性质,高效传递性,直接就写成了*类型的模式,但是这个时候如果改变后,这里会发生错误,具体如下:
此时当我们在主函数(main)里调用book01接口的时候,IDE出现了错误,我们来看看是报了什么错误?
由编译器的推荐修改可知,我们这里如果加上一个&符号就可以了,那么说明这里传进去的应该是指针类型,而不是Book01类型,分析:因为在之前我们写方法的时候,我们传进去的参数是*Book01类型的,所以这个时候,我们是对*Book01类型实现了接口的方法,我们在主函数里传进去的应该是对应的指针类型!
如果我们把*去掉,那么我们就是对Book01实现了接口方法,那么在主函数里调用的时候就传的是Book01类型的,也就是book01。