接口传参的写法
scss
复制代码
//抽象的银行业务员
type AbstractBanker interface{
DoBusi() //抽象的处理业务接口
}
//存款的业务员
type SaveBanker struct {
//AbstractBanker
}
func (sb *SaveBanker) DoBusi() {
fmt.Println("进行了存款")
}
func BankerBusiness(banker AbstractBanker) {
//通过接口来向下调用,(多态现象)
banker.DoBusi()
}
BankerBusiness(&SaveBanker{})
> 疑问:BankerBusiness函数要接受一个接口,但是传给它了一个指针?
接口类型的变量可以持有任何实现了该接口的类型的值。即BankerBusiness 函数可以接受任何实现了AbstractBanker 接口的值。而 &SaveBanker{} 是 SaveBanker 类型的指针,它实现了 AbstractBanker 接口。
> 疑问:除了结构体 还有什么类型可以实现AbstractBanker 接口
除了结构体,还可以使用其他类型实现 AbstractBanker 接口,包括但不限于:
自定义类型:你可以定义自己的类型,并实现 AbstractBanker 接口的方法。这些自定义类型可以是基本类型(如 int、string 等),也可以是其他复杂类型。
指针类型:除了使用结构体的指针来实现接口外,你也可以使用其他类型的指针(如自定义类型的指针、基本类型的指针)来实现 AbstractBanker 接口。
e.g.
go
复制代码
// 自定义类型的指针
type CustomType int
func (c *CustomType) DoBusi() {
fmt.Println("进行了自定义类型的业务")
}