MST

星途 面试题库

面试题:Go函数签名兼容性与接口实现

定义一个接口 type MyInterface interface { Do(a int, b string) (int, error) }。现有两个函数 func do1(a int, b string) (int, error) 和 func do2(a int, b string, c float32) (int, error)。请问哪个函数可以作为实现MyInterface接口的方法?详细说明判断依据以及函数签名兼容性在接口实现中的作用。
26.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 答案func do1(a int, b string) (int, error) 可以作为实现 MyInterface 接口的方法。
  2. 判断依据
    • 接口 MyInterface 定义的方法签名为 Do(a int, b string) (int, error)
    • 函数 do1 的签名是 func do1(a int, b string) (int, error),与接口 MyInterfaceDo 方法的签名完全一致,包括参数的数量、类型以及返回值的数量和类型。
    • 而函数 do2 的签名为 func do2(a int, b string, c float32) (int, error),其参数比接口 MyInterfaceDo 方法多了一个 c float32,不满足接口方法签名要求。
  3. 函数签名兼容性在接口实现中的作用
    • 确保一致性:在 Go 语言中,接口定义了一组方法的签名。当一个类型实现某个接口时,该类型对应的方法签名必须与接口定义的方法签名严格一致。这保证了不同类型在实现同一接口时,调用者可以以统一的方式调用这些方法,而无需关心具体实现类型。例如,如果有多个类型都实现了 MyInterface 接口,调用者通过 MyInterface 接口类型的变量调用 Do 方法时,不需要知道实际的实现类型,只要保证传入 intstring 类型的参数,就能得到 interror 类型的返回值。
    • 类型安全:严格的函数签名兼容性检查有助于在编译期发现错误。如果实现接口的方法签名与接口定义不一致,编译器会报错,避免在运行时出现难以调试的类型不匹配错误,提高了程序的稳定性和可靠性。