简单介绍:接口最简单的用法、空接口、关于接受者问题
这里记录的是我个人不太熟练的语法和知识
详细内容移步:李文周的博客(非常详细)
#接口类型
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。
接口可以嵌套
一种类型可以实现多个接口
多个类型可以实现同一接口
接口(interface)是一种类型,一种抽象的类型。
这句话是重中之重,当有疑惑是不妨心中默念:接口(interface)是一种类型,一种抽象的类型。
几乎是最简单的用法:
type A struct {
AA string
}
func (a A) out() {
fmt.Println(a.AA)
}
type B struct {
BB int
}
func (b B) out() {
fmt.Println(b.BB)
}
type AB interface {
out()
}
func main() {
aaa := A{
AA: "AAA",
}
bbb := B{
BB: 1234,
}
var MyInterface AB
MyInterface = aaa
MyInterface.out()
MyInterface = bbb
MyInterface.out()
AAA
1234
#空接口
因为没有定义任何方法,所以对说有数据类型都实现了这个空接口
var x interface {
}
func main() {
s := "asdf"
i := 1324
f := true
x = s
fmt.Println(x)
x = i
fmt.Println(x)
x = f
fmt.Println(x)
}
asdf
1324
true
空接口可以作为函数的参数
空接口还可以作为map的值
这里就不演示了
#结构体方法接受者对接口的影响
https://www.liwenzhou.com/posts/Go/12_interface/
当接收者是值类型
接口都可以接收‘值’类型和‘指针’类型的结构体
当接收者是指针类型
接口不可以接收‘值’类型结构体,只能接收‘指针’类型的结构体