首页 > 其他分享 >Go 如何实现多态

Go 如何实现多态

时间:2023-10-26 13:44:44浏览次数:29  
标签:Area float64 多态 接口 如何 Shape Go

在 Go 语言中,虽然没有经典的面向对象编程中的继承和多态的概念,但你可以通过接口(interface)来实现多态性。Go 语言鼓励组合和接口多态,这使得代码更加灵活和模块化。下面将详细介绍 Go 语言中如何实现多态。

多态性是面向对象编程的一个核心概念,它允许不同类型的对象在一致的接口下执行不同的操作。在 Go 中,多态性通常是通过接口来实现的。

1. 定义接口

首先,你需要定义一个接口,该接口定义了一组方法,这些方法将被不同类型的对象实现。接口通常用于描述对象的行为。

type Shape interface {
    Area() float64
}

上面的 Shape 接口定义了一个名为 Area 的方法,该方法返回一个浮点数。任何实现了 Shape 接口的类型都必须提供 Area 方法的具体实现。

2. 创建不同类型的结构体

接下来,你可以创建不同类型的结构体,这些结构体将实现 Shape 接口。每个结构体都需要提供 Area 方法的具体实现。

type Rectangle struct {
    Width  float64
    Height float64
}

type Circle struct {
    Radius float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (c Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

上述代码定义了两种形状,矩形和圆形,并为它们分别实现了 Area 方法。

3. 使用多态

现在,你可以创建不同类型的对象,并使用它们通过接口进行多态调用。

func main() {
    r := Rectangle{Width: 4, Height: 5}
    c := Circle{Radius: 3}

    shapes := []Shape{r, c}

    for _, shape := range shapes {
        fmt.Printf("Area: %f\n", shape.Area())
    }
}

在上面的 main 函数中,我们创建了一个 shapes 切片,该切片包含了不同类型的形状对象(矩形和圆形)。然后,我们遍历 shapes 切片,并通过接口 Shape 调用 Area 方法。由于这两种形状都实现了 Shape 接口,因此多态性使我们能够以一致的方式调用它们的 Area 方法。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意


标签:Area,float64,多态,接口,如何,Shape,Go
From: https://www.cnblogs.com/lianshuiwuyi/p/17789217.html

相关文章

  • c# Winform中如何把图片添加到resources中
    我们在Winform项目中中需要插入图片资源,但是新建的项目中找不到Resources文件夹,怎么才能出现呢?1:双击项目下的Resources.resx,出现视图2:单击"添加资源",选择"添加现有文件",找到你要添加的图片,确定之后保存就可以了3:这时候你会发现视图中出现添加的图片,解决方案......
  • 如何设计edm邮件营销模板?模板制作方法
    在进行edm邮件营销活动时,一个优秀的邮件模板设计是必不可少的。一个好的邮件模板设计可以提高邮件的打开率和转化率,引起潜在客户的关注和兴趣。那么,如何设计edm邮件营销模板?下面,我们将为大家介绍几种模板制作方法。一、选择合适的邮件模板首先,要选择款式简洁、色彩明亮、布局合理、......
  • 一文详解多模态大模型发展及高频因子计算加速GPU算力 | 英伟达显卡被限,华为如何力挽狂
    ★深度学习、机器学习、多模态大模型、深度神经网络、高频因子计算、GPT-4、预训练语言模型、Transformer、ChatGPT、GenAI、L40S、A100、H100、A800、H800、华为、GPU、CPU、英伟达、NVIDIA、卷积神经网络、StableDiffusion、Midjourney、FasterR-CNN、CNN随着人工智能技术的快......
  • 安卓端GB28181设备接入模块如何实现实时位置订阅(MobilePosition)
    技术背景实时位置(MobilePosition)订阅和上报,对GB28281设备接入终端尤其重要,如移动单兵设备、执法记录仪、智能安全帽、车载终端等,Android国标接入设备通过获取到实时经纬度信息,按照一定的间隔上报到国标服务平台,国标服务平台通过如电子地图,实时动态显示前端设备的定位信息,从而实现前......
  • 如何优雅地使用 pb_ds
    如何优雅地使用pb_ds定义头文件总所周知,dev年久失修,对这种高端科技并不是很支持,直接背头文件又长又臭。但如果使用的其他高端编辑器,你可以直接写:#include<bits/extc++.h>使用dev的话你也需要先写这个,然后编译会出错。大概是点击下面编译错误的加粗的第一行,然后你就进入......
  • 如何在Ubuntu20.04.3机器上使用kvm创建CentOs7.9的虚拟机
    一、虚拟化背景因为产品在Ubuntu的环境上部署兼容性差,Ubuntu的实体机上还运行着其他系统没办法进行系统的更换重装,所以只能出此下策~二、开始搭建更新Ubuntu系统打开终端并通过如下命令更新本地的软件包索引$sudoaptupdate$sudoaptupgrade检查虚拟化是否开启在......
  • Django + celery + django-celery-result + django-celery-beat 实现定时任务
    1.库版本celery5.3.4Django4.2.6django-celery-beat2.5.0django-celery-results2.5.1django-timezone-field6.0.1eventlet0.33.3flower2.0.1redis3.5.3项目名称:new_project2.set......
  • 「实用技巧」后端如何使用 Eolink Apikit 快速调试接口?
    程序员最讨厌的两件事:写文档别人不写文档写文档、维护文档比较麻烦,而且费时,还会经常出现API更新了,但文档还是旧的,各种同步不一致的情况,从而耽搁彼此的时间,大多数开发人员不愿意写API文档。EolinkApikit为后端工程师提供API文档的创建与自动化生成、快速接口调试、以......
  • 如何使用Python实现一个完整的排列
    一、前言排列是数学中一个重要的概念,也是计算机程序设计中经常用到的工具之一。Python是一门优秀的编程语言,在实现排列方面也非常方便。本文将从多个方面详细介绍如何使用Python实现一个完整的排列。二、什么是排列排列是将一组元素按照一定的顺序进行排列,每个元素只能出现一次。例......
  • PLC、触摸屏、上位机之间如何实现无线数据交互功能?
    本文以组态王与西门子触摸屏和2台西门子S7-200SMART为例,介绍组态王、触摸屏与多台PLC在Profinet协议下的自组网无线通信实现过程。在本方案中采用了西门子PLC无线通讯终端——DTD418M,作为实现无线通讯的硬件设备。我们无需更改网络参数和原有程序,也不必了解协议细节,通过欧美系PLC......