在 Go 语言中,接口是一种抽象类型,它定义了一组方法,但它不会实现这些方法。任何实现了接口中所有方法的类型都可以被认为实现了该接口。要在 Go 中定义接口,请使用关键字 type
和接口名称,然后在括号内指定接口的方法列表。方法列表使用大括号 {}
包围,每个方法由返回类型、方法名称、参数列表和方法体组成。这里有一个简单的示例:
package main import "fmt" // 定义一个名为 Shape 的接口,包含两个方法:Area 和 Perimeter type Shape interface { Area() float64 Perimeter() float64 } // 定义一个名为 Circle 的结构体,表示一个圆形 type Circle struct { Radius float64 } // 为 Circle 结构体实现 Shape 接口的 Area 方法 func (c Circle) Area() float64 { return 3.14 * c.Radius * c.Radius } // 为 Circle 结构体实现 Shape 接口的 Perimeter 方法 func (c Circle) Perimeter() float64 { return 2 * 3.14 * c.Radius } // 定义一个名为 Rectangle 的结构体,表示一个矩形 type Rectangle struct { Width, Height float64 } // 为 Rectangle 结构体实现 Shape 接口的 Area 方法 func (r Rectangle) Area() float64 { return r.Width * r.Height } // 为 Rectangle 结构体实现 Shape 接口的 Perimeter 方法 func (r Rectangle) Perimeter() float64 { return 2 * (r.Width + r.Height) } func main() { // 创建一个 Shape 类型的切片,用于存储不同类型的 Shape 对象 var shapes []Shape // 向切片中添加一个 Circle 对象 shapes = append(shapes, Circle{Radius: 5}) // 向切片中添加一个 Rectangle 对象 shapes = append(shapes, Rectangle{Width: 3, Height: 4}) // 遍历切片并调用每个对象的 Area 和 Perimeter 方法 for _, shape := range shapes { fmt.Printf("Area: %v, Perimeter: %v\n", shape.Area(), shape.Perimeter()) } }
在这个示例中,我们定义了一个名为 Shape
的接口,它包含两个方法:Area()
和 Perimeter()
。然后,我们定义了两个结构体:Circle
和 Rectangle
,并为它们实现了 Shape
接口的所有方法。最后,我们在 main
函数中创建了一个 Shape
类型的切片,并将 Circle
和 Rectangle
对象添加到切片中。通过遍历切片并调用每个对象的 Area()
和 Perimeter()
方法,我们可以看到不同类型的对象都可以使用相同的接口类型。