第六届字节跳动青训营第五课 | 青训营

39 阅读1分钟

接口传参的写法

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("进行了自定义类型的业务")
}