面试题答案
一键面试实现情况分析
在Go语言中,接口的实现是隐式的,只要一个类型实现了接口中定义的所有方法,那么这个类型就被认为实现了该接口。对于 Struct1
和 Struct2
,尽管它们结构体定义不同,但由于内部结构和 M()
方法实现逻辑都一样,所以它们都实现了接口 I
。从类型相同性角度,虽然 Struct1
和 Struct2
本身类型不同,但在接口 I
的视角下,它们都满足接口契约,都可被视为实现了 I
的类型。
潜在问题
- 代码复用性受限:虽然
M()
方法实现逻辑相同,但由于结构体不同,无法直接复用结构体相关的其他代码(如特定结构体的初始化逻辑等),可能导致重复代码增多。 - 类型转换复杂:如果在代码中有需要将
Struct1
或Struct2
转换为其他相关类型的场景,由于它们是不同结构体类型,转换逻辑会更加复杂,增加代码出错风险。 - 维护成本增加:当需要对
M()
方法逻辑进行修改时,需要同时在Struct1
和Struct2
中修改,若遗漏一处,可能导致程序逻辑不一致。
潜在好处
- 灵活性和扩展性:不同结构体定义可以使代码在不同业务场景下更具针对性。例如,
Struct1
可用于业务A场景,Struct2
用于业务B场景,虽方法相同但从结构体语义上更符合不同业务需求,增强了代码的灵活性和扩展性。 - 解耦与模块化:不同结构体实现接口,使得不同模块可以基于自己定义的结构体来实现接口,各模块之间耦合度降低,更易于独立开发、测试和维护。