面试题答案
一键面试- 返回值类型推导过程:
- 接口
Calculator
定义了Calculate
方法,其返回值类型为(int, error)
。 - 结构体
MathCalculator
实现了Calculator
接口的Calculate
方法,并且返回值类型也是(int, error)
。 - 在函数
operate(c Calculator) (int, error)
中,参数c
的类型是Calculator
接口类型。由于Go语言的静态类型系统,编译器在编译时知道c
实现了Calculator
接口,也就知道c.Calculate()
方法的返回值类型是(int, error)
。 - 当调用
c.Calculate()
时,编译器会根据接口定义的Calculate
方法返回值类型来推导实际调用时的返回值类型,所以这里返回值类型就是(int, error)
,与接口定义的返回值类型保持一致。
- 接口
- 在Go语言接口实现和多态性方面的作用:
- 接口实现:通过接口定义方法签名,结构体实现接口方法,使得不同的结构体可以实现相同的接口。在这个例子中,
MathCalculator
结构体实现了Calculator
接口的Calculate
方法,遵循了接口定义的规范,保证了代码的一致性和规范性。 - 多态性:在
operate
函数中,参数c
是Calculator
接口类型,这意味着可以传入任何实现了Calculator
接口的结构体实例。无论传入的是MathCalculator
实例,还是未来可能实现Calculator
接口的其他结构体实例,operate
函数都可以统一调用c.Calculate()
方法。因为编译器会根据传入实例的实际类型来确定调用哪个具体实现的Calculate
方法,从而实现多态行为。这种方式提高了代码的灵活性和可扩展性,使得代码可以适应不同的实现,而不需要针对每个具体类型编写重复的处理逻辑。
- 接口实现:通过接口定义方法签名,结构体实现接口方法,使得不同的结构体可以实现相同的接口。在这个例子中,