在Go语言教程中,他们解释了界面如何工作:
Go没有课程。但是,您可以在结构类型上定义方法。该方法接收器出现在FUNC关键字和方法名之间自身的参数列表。
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
接口类型由一组方法定义。接口类型的值可以包含实现那些方法的任何值。
这是在Go中创建界面的唯一方法。Google进一步说明:
类型通过实现方法来实现接口。没有明确的意图
interface
声明(即声明)。隐式接口将实现程序包与定义接口的程序包分离:两者都不依赖彼此。
它还鼓励定义精确的接口,因为您不必查找每个实现并使用新的接口名称对其进行标记。
所有这些听起来都像C#中的扩展方法,但是Go中的方法是残酷的多态的。它们将在实现它们的任何类型上运行。
Google声称这鼓励快速发展,但是为什么呢?您是否放弃了C#中的显式接口而放弃了某些东西?C#中的扩展方法能否允许人们从Go接口中获得C#的某些好处?
相关:stackoverflow.com/q/11441905
—
罗伯特·哈维
这些Go接口听起来比C#扩展方法更像C ++模板可以做什么。在C#中,没有什么比“实现方法A和B的任何类型”更重要的了,但是您可以使用C ++模板来实现。
—
2013年
“隐式接口”不只是鸭子输入的一种形式吗?
—
2013年
“'隐式接口'不只是鸭子输入的一种形式吗?” Go的接口是结构化类型的一个示例。非常相似的概念。
—
mortdeus