在 Go 语言中,接口(interface)是一种类型,用于定义一组方法的集合。接口定义了一组行为规范,而不关心具体的实现细节。它定义了对象应该具有的方法,并且通过实现这些方法来满足接口的要求。
接口定义使用 type 关键字,后跟接口名称和方法列表。每个方法在接口中被声明,但没有具体的实现代码。接口中的方法只包含方法签名,即方法名、参数列表和返回类型。
例子
在 Go 语言中,var shape Shape 是一个变量声明语句,用于声明一个变量 shape,该变量的类型是 Shape 接口类型。
在这个语句中,var 是用于声明变量的关键字,shape 是变量的名称,Shape 是变量的类型。
当我们声明一个变量为接口类型时,该变量可以持有任何实现该接口的值。也就是说,可以将任何满足 Shape 接口方法签名要求的类型的值赋给 shape 变量。
在接口变量的声明中,接口类型通常用作变量的静态类型,而具体的实现类型则是变量的动态类型。这意味着接口变量在运行时可以持有不同的具体类型的值,只要它们满足接口的方法要求。
以下是一个示例,展示了 var shape Shape 的使用:
package main
import "fmt"
// 定义一个接口
type Shape interface {
Area() float64
}
// 定义一个结构体类型 Circle,实现了 Shape 接口
type Circle struct {
Radius float64
}
// Circle 结构体实现 Shape 接口的 Area 方法
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
// 定义一个结构体类型 Rectangle,实现了 Shape 接口
type Rectangle struct {
Width float64
Height float64
}
// Rectangle 结构体实现 Shape 接口的 Area 方法
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
// 创建一个 Circle 结构体实例
circle := Circle{Radius: 5}
// 创建一个 Rectangle 结构体实例
rectangle := Rectangle{Width: 3, Height: 4}
// 将 Circle 实例赋值给 Shape 接口类型的变量
var shape Shape
shape = circle
// 调用接口中定义的方法
fmt.Println("圆的面积:", shape.Area())
// 将 Rectangle 实例赋值给 Shape 接口类型的变量
shape = rectangle
// 调用接口中定义的方法
fmt.Println("矩形的面积:", shape.Area())
}