【go语言】3.1.2 接口的定义和实现

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

在 Go 中,接口是一种抽象类型,用来描述其他类型应该有哪些方法。它定义了一组方法,但没有实现。这些方法由其他类型实现。
接口的定义

接口定义的格式如下:
  1. type InterfaceName interface {
  2.     Method1(param1 type1, param2 type2) returntype1
  3.     Method2(param1 type1, param2 type2) returntype2
  4.     // 更多的方法...
  5. }
复制代码
例如,我们可以定义一个 Shape 接口,如下所示:
  1. type Shape interface {
  2.     Area() float64
  3.     Perimeter() float64
  4. }
复制代码
这个 Shape 接口定义了两个方法:Area 和 Perimeter,分别用于计算形状的面积和周长。每个实现了 Shape 接口的类型都应该有这两个方法。
接口的实现

在 Go 中,我们不需要明确声明一个类型实现了哪个接口,只需要这个类型实现了接口定义的所有方法即可。
例如,我们可以定义一个 Rectangle 类型,并让它实现 Shape 接口:
  1. type Rectangle struct {
  2.     Width, Height float64
  3. }
  4. // 实现 Shape 接口的 Area 方法
  5. func (r Rectangle) Area() float64 {
  6.     return r.Width * r.Height
  7. }
  8. // 实现 Shape 接口的 Perimeter 方法
  9. func (r Rectangle) Perimeter() float64 {
  10.     return 2 * (r.Width + r.Height)
  11. }
复制代码
在这个例子中,Rectangle 类型实现了 Shape 接口的所有方法,因此,我们说 Rectangle 类型实现了 Shape 接口。
接口的使用

接口最常见的用途是作为函数的参数。通过这种方式,我们可以编写出更加通用和可重用的代码。
例如,我们可以定义一个函数,它接受一个 Shape 接口类型的参数:
  1. func PrintShapeDetails(s Shape) {
  2.     fmt.Printf("Area: %.2f, Perimeter: %.2f\n", s.Area(), s.Perimeter())
  3. }
复制代码
然后,我们可以将任何实现了 Shape 接口的类型作为参数传递给这个函数:
  1. r := Rectangle{Width: 10, Height: 5}
  2. PrintShapeDetails(r)
复制代码
输出:
  1. Area: 50.00, Perimeter: 30.00
复制代码
总的来说,接口是 Go 语言中的一种强大的工具,它允许我们编写出更加通用和可重用的代码。任何类型只要实现了接口中定义的所有方法,就可以说它实现了该接口。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表