一、概念
接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。
Go语言中接口类型的独特之处在于它是满足隐式实现的。也就是说,我们没有必要对于给定的具体类型定义所有满足的接口类型;简单地拥有一些必需的方法就足够了。
这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不会去改变这些类型的定义;当我们使用的类型来自于不受我们控制的包时这种设计尤其有用。
二、接口的声明及使用
package main import ( "fmt" ) type ICale interface { Sum(a, b int) int } type Computer struct { } func (this *Computer) Sum(a, b int) int { return a + b } func (this *Computer) Print() int { fmt.Println("ai") } func main() { fmt.Println(new(Computer).Sum(1, 2)) var icale ICale = new(Computer) fmt.Println(icale.Sum(2, 3)) }
三、空接口类型:对实现它的类型没有要求,所以我们可以将任意一个值赋给空接口类型
package main import ( "fmt" ) func main() { var v interface{} v = 1 fmt.Println(v) v = "123" fmt.Println(v) v = true fmt.Println(v) v = map[string]int{"one": 1} fmt.Println(v) }
package main import ( "fmt" ) func main() { print(map[string]int{"one": 1}) print(func() int { return 1 }) print(func() int { return 1 }()) } func print(val interface{}) { fmt.Println(val) }
有疑问加站长微信联系(非本文作者)