首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go程序例子(21):接口

Go程序例子(21):接口

原创
作者头像
用户11078756
发布2024-12-14 16:22:02
发布2024-12-14 16:22:02
1700
举报
文章被收录于专栏:go程序例子go程序例子

接口是方法签名的命名集合。

代码语言:javascript
复制
package main

import (
    "fmt"
    "math"
)
// 以下是一个用于几何图形的基础接口。
type geometry interface {
    area() float64
    perim() float64
}
// 在我们的示例中,我们将在 rect 和 circle 类型上实现这个接口。
type rect struct {
    width, height float64
}
type circle struct {
    radius float64
}
// 要在 Go 中实现一个接口,我们只需实现接口中的所有方法。这里我们在矩形上实现了 geometry 接口。
func (r rect) area() float64 {
    return r.width * r.height
}
func (r rect) perim() float64 {
    return 2*r.width + 2*r.height
}
// 对圆形的实现。
func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}
// 如果一个变量具有接口类型,那么我们可以调用该接口中定义的方法。以下是一个通用的 measure 函数,利用这一特性来处理任何实现了 geometry 接口的类型。
func measure(g geometry) {
    fmt.Println(g)
    fmt.Println(g.area())
    fmt.Println(g.perim())
}

func main() {
    r := rect{width: 3, height: 4}
    c := circle{radius: 5}
	// circle 和 rect 结构体类型都实现了 geometry 接口,因此我们可以将这些结构体的实例作为参数传递给 measure 函数。
    measure(r)
    measure(c)
}

运行结果:

代码语言:javascript
复制
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档