Golang 接口是如何实现的?

Go语言中的接口是为了解决多态性而设计的。
接口的实现主要包括:
一、接口定义
接口使用type定义,类似结构体。

type interface_name interface {
    method_name1 [return_type]
    method_name2 [return_type]
    // ...
}

接口只指定方法签名,而没有方法体。

二、接口实现
一个类型如果实现了接口指定的所有方法,那么这个类型就实现了这个接口。

type Dog struct {
    name string 
}

func (d Dog) Speak() {
    fmt.Println("汪汪叫!")
}

func (d Dog) Run() {
    fmt.Println("狗狗在跑...")
}

Dog 实现了 Speak() 和 Run() 两方法,所以实现了 Animal 接口。

三、接口值
接口变量可以保存具体类型的指针。

var a Animal  
a = Dog{"大黄"}

四、类型断言
可以使用类型断言获取接口底层的具体类型。

dog := a.(Dog)
dog.name

总的来说,Go语言接口的实现包括:

  1. 接口定义 – 指定方法签名
  2. 具体类型实现接口 – 实现接口方法
  3. 接口变量 – 可以保存不同类型
  4. 类型断言 – 获取具体类型

这种设计实现了 Go语言的多态性。它是 Go面向对象的主要手段。