都说go语言的接口是整个go语言的核心,是的。
可以说go语言中的面相对象的特行都在接口中。接口定义了各种方法。接口是一种like a的思想。
继承是一种is a的思想。
举例:
type 猫 struct{
}
type 老虎 struct{
猫
}
这就是继承,老虎继承了猫的所有特性,包括猫具有的方法。它是显性的表达出来了这种继承的特性。
但是接口不是,接口是隐性的在表达。
type 猫科 interface{
climbing()
run()
}
func (c 老虎) run(){...}
func(c 老虎) climbing(){...}
看到了吧,猫科这个结构体定义了两个方法,分别是climbing()和run(),但是老虎实现了这两种方法,既然老虎会爬会跑,很像猫科呀,所以这就是一种like a的方法。
所以可以var c 猫科=老虎{}
也可以在func sing(c 猫科)这样子的函数方法中:
var tiger 老虎{...}
func sing(tiger),为什么可以这样子,因为老虎看起来像猫科呀,所以凡是可以猫科作为接口变量的地方,都是拿老虎的结构体变量传入的。