Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Golang接口组合与多态实现方法_创想鸟

Golang接口组合与多态实现方法

Go语言通过接口隐式实现多态,无需继承;只要类型实现接口所有方法即视为实现该接口。例如Shape接口定义Area方法,Rectangle和Circle分别实现后,可统一通过PrintArea函数调用,体现多态性。接口组合通过嵌套接口扩展功能,如Animal接口组合Speaker和Mover并添加Name方法,任何实现这三个方法的类型自动实现Animal。空接口interface{}或any可接收任意类型,配合类型断言或switch提取具体类型。这种设计以方法签名为核心,提升代码复用性与抽象能力,使程序更易扩展和测试。

golang接口组合与多态实现方法

Go语言通过接口(interface)实现多态,不依赖继承,而是通过方法签名的隐式实现。接口组合则允许将多个接口合并为更大功能的接口,提升代码复用性和抽象能力。

接口的基本定义与多态实现

在Go中,接口是一组方法签名的集合。只要一个类型实现了接口中的所有方法,就认为它实现了该接口,无需显式声明。

例如,定义一个Shape接口:

type Shape interface {    Area() float64}

然后让Rectangle和Circle分别实现该接口:

立即学习“go语言免费学习笔记(深入)”;

type Rectangle struct {    Width, Height float64}

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

type Circle struct {Radius float64}

func (c Circle) Area() float64 {return 3.14 c.Radius c.Radius}

调用时,可以统一使用Shape接口变量,体现多态:

func PrintArea(s Shape) {    fmt.Println("Area:", s.Area())}

// 调用r := Rectangle{3, 4}c := Circle{5}PrintArea(r) // 输出: Area: 12PrintArea(c) // 输出: Area: 78.5

同一个函数PrintArea能处理不同类型的对象,这就是Go中的多态。

接口组合:嵌套接口构建更复杂行为

Go不支持类继承,但接口可以通过组合来扩展功能。接口组合就是在一个接口中嵌入另一个接口。

例如,定义两个基础接口:

type Speaker interface {    Speak() string}

type Mover interface {Move() string}

然后通过组合创建一个更高级的接口:

type Animal interface {    Speaker    Mover    Name() string}

任何实现Speaker、Mover和Name方法的类型,就自动实现了Animal接口。

实现示例:

type Dog struct {    name string}

func (d Dog) Speak() string { return "Woof!" }func (d Dog) Move() string { return "Running" }func (d Dog) Name() string { return d.name }

// 使用var a Animal = Dog{"Buddy"}fmt.Println(a.Name(), "says:", a.Speak(), "and moves by", a.Move())

空接口与类型断言:处理任意类型

interface{}(或any)是Go中最通用的接口,所有类型都默认实现它,常用于需要接收任意类型的场景。

例如函数参数:

func PrintValue(v interface{}) {    fmt.Println("Value:", v)}

若需从空接口中提取具体类型,使用类型断言:

if str, ok := v.(string); ok {    fmt.Println("It's a string:", str)} else {    fmt.Println("Not a string")}

也可用switch进行类型判断:

switch val := v.(type) {case int:    fmt.Println("Integer:", val)case string:    fmt.Println("String:", val)default:    fmt.Println("Unknown type")}

基本上就这些。Go的多态靠接口隐式实现,接口组合代替多重继承,简洁而灵活。只要类型满足方法集,就能被当作接口使用,这种设计让程序更容易扩展和测试。

以上就是Golang接口组合与多态实现方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1403745.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang包命名冲突及别名使用技巧
上一篇 2025年12月15日 19:51:23
Golang错误堆栈追踪与调试技巧
下一篇 2025年12月15日 19:51:27

相关推荐

  • 《剑与魔法与学园》三部曲合集发售 经典迷宫RPG

    《剑与魔法与学园》三部曲合集发售 经典迷宫RPG《剑与魔法与学园》三部曲合集发售 经典迷宫RPG《剑与魔法与学园》三部曲合集发售 经典迷宫RPG《剑与魔法与学园》三部曲合集发售 经典迷宫RPG

    由ACQUIRE Corp工作室打造并发行,其经典迷宫RPG系列《剑与魔法与学园》三部曲合集今日正式推出,现已登陆PS5与Switch平台,喜爱该系列的玩家不容错过。 · 本次发布的《剑与魔法与学园》三部曲合集包含了《剑与魔法与学园 2G Remaster Edition》,以及于2010年登陆PS…

    2026年10月1日 • 用户投稿
    000
  • 豆包AI如何辅助Android开发?快速构建移动应用界面

    豆包AI如何辅助Android开发?快速构建移动应用界面豆包AI如何辅助Android开发?快速构建移动应用界面豆包AI如何辅助Android开发?快速构建移动应用界面豆包AI如何辅助Android开发?快速构建移动应用界面

    豆包ai在android开发中可作为高效助手,通过多种方式提升开发效率。1. 可快速生成xml布局代码,根据描述输出结构清晰的ui组件,如按钮栏、卡片列表等,并支持material design风格;2. 提供java/kotlin代码片段建议,如页面跳转、适配器编写,并解释关键逻辑;3. 推荐界面…

    2026年10月1日 • 用户投稿
    000
  • LenovoThinkPad修复蓝屏代码0x0000001E的完整方法。

    LenovoThinkPad修复蓝屏代码0x0000001E的完整方法。LenovoThinkPad修复蓝屏代码0x0000001E的完整方法。LenovoThinkPad修复蓝屏代码0x0000001E的完整方法。LenovoThinkPad修复蓝屏代码0x0000001E的完整方法。

    蓝屏错误0x0000001E通常由驱动冲突、硬件不兼容或内存问题引起,可尝试安全模式卸载新软件、清除第三方服务、检查内存连接、更新官方驱动或系统还原解决。 如果您在使用Lenovo ThinkPad时遇到蓝屏错误代码0x0000001E(KMODE_EXCEPTION_NOT_HANDLED),这通…

    2026年10月1日 • 用户投稿
    100
  • Word文档怎么修改背景颜色_Word文档背景颜色修改教程

    Word文档怎么修改背景颜色_Word文档背景颜色修改教程Word文档怎么修改背景颜色_Word文档背景颜色修改教程Word文档怎么修改背景颜色_Word文档背景颜色修改教程Word文档怎么修改背景颜色_Word文档背景颜色修改教程

    设置Word文档背景颜色可提升视觉效果,适用于突出内容或美化排版。首先,通过“设计”选项卡中的“页面颜色”可为整个页面设置统一背景色,支持预设色、自定义RGB值及渐变、纹理、图片填充;若需打印背景色,需在选项中启用。其次,使用“开始”选项卡下的“底纹”功能,可为选定文字添加局部背景色,便于高亮重点内…

    2026年10月1日 • 用户投稿
    100
  • 大胃袋大食花! 《宝可梦传说 Z-A》新MAGA登场

    大胃袋大食花! 《宝可梦传说 Z-A》新MAGA登场大胃袋大食花! 《宝可梦传说 Z-A》新MAGA登场大胃袋大食花! 《宝可梦传说 Z-A》新MAGA登场大胃袋大食花! 《宝可梦传说 Z-A》新MAGA登场

    宝可梦公司最近公开了将在《宝可梦传说 z-a》中亮相的全新超级进化形态,本次的焦点正是系列经典宝可梦——大食花。这只草/毒属性的宝可梦自初代登场以来便深受玩家喜爱,而此次的超级进化造型,竟意外神似某位早已深入人心的宝可梦角色——大胃袋。 这一新形态是通过宝可梦官方YouTube频道发布的悬疑短片《散…

    2026年10月1日 • 用户投稿
    100
  • 《街霸6》推出大型更新PV Year 3首位追加角色“沙加特”上线!

    《街霸6》推出大型更新PV Year 3首位追加角色“沙加特”上线!《街霸6》推出大型更新PV Year 3首位追加角色“沙加特”上线!《街霸6》推出大型更新PV Year 3首位追加角色“沙加特”上线!《街霸6》推出大型更新PV Year 3首位追加角色“沙加特”上线!

    近日,《街头霸王6》官方公布了全新角色“毒蛇”(c. viper)的先行预告片。与此同时,游戏第三赛季季票正式上线,首位dlc格斗家——经典传奇人物“沙加特”(sagat)也已登场,相关宣传pv同步发布,一起来了解一下! 宣传视频: 本次更新为“环球游历”模式新增了地图、任务以及趣味小游戏;在“格斗…

    2026年10月1日 • 用户投稿
    000
  • Dell电脑蓝屏出现怎么办?一步步教程教你快速修复蓝屏问题。

    Dell电脑蓝屏出现怎么办?一步步教程教你快速修复蓝屏问题。Dell电脑蓝屏出现怎么办?一步步教程教你快速修复蓝屏问题。Dell电脑蓝屏出现怎么办?一步步教程教你快速修复蓝屏问题。Dell电脑蓝屏出现怎么办?一步步教程教你快速修复蓝屏问题。

    蓝屏问题可通过释放静电、硬件诊断、系统修复、还原或重置、更新BIOS及驱动解决。首先排除硬件故障,再使用SupportAssist OS Recovery进行自动修复或启动修复,必要时重置系统,并更新BIOS和驱动以提升稳定性。 如果您在使用Dell电脑时遇到系统崩溃并出现蓝屏,这可能是由硬件故障、…

    2026年10月1日 • 用户投稿
    200
  • 小可搜搜App如何搜索政府信息 小可搜搜App的政务公开查询

    小可搜搜App如何搜索政府信息 小可搜搜App的政务公开查询小可搜搜App如何搜索政府信息 小可搜搜App的政务公开查询小可搜搜App如何搜索政府信息 小可搜搜App的政务公开查询小可搜搜App如何搜索政府信息 小可搜搜App的政务公开查询

    答案:无法快速找到政府信息可能因关键词不当,应使用精准关键词、筛选“政务”板块并验证.gov.cn来源的权威性。 如果您在小可搜搜App中无法快速找到所需的政府信息,可能是因为查询方法或关键词使用不当。以下是高效利用该应用进行政务公开查询的步骤: 本文运行环境:华为Mate 60 Pro,鸿蒙OS …

    2026年10月1日 • 用户投稿
    000
  • win10 1903和win10 1909有什么区别?

    win10 1903和win10 1909有什么区别?win10 1903和win10 1909有什么区别?win10 1903和win10 1909有什么区别?win10 1903和win10 1909有什么区别?

    微软于11月份发布了win10 1909版本,这一版本受到了众多用户的关注。那么,win10 1909相较于之前的win10 1903版本有哪些不同之处呢?接下来就由我为大家详细说明一下。 win10 1903与win10 1909的区别 一、功能方面的差异 Win10 1903新增功能: 主题界面…

    2026年10月1日 • 用户投稿
    200
  • es文件浏览器解析安装包时出现错误 APK安装包解析失败问题修复指南

    es文件浏览器解析安装包时出现错误 APK安装包解析失败问题修复指南es文件浏览器解析安装包时出现错误 APK安装包解析失败问题修复指南es文件浏览器解析安装包时出现错误 APK安装包解析失败问题修复指南es文件浏览器解析安装包时出现错误 APK安装包解析失败问题修复指南

    1、需开启未知来源安装权限,进入设置→应用管理→安装未知应用,授权ES文件浏览器;2、检查APK文件大小是否完整,与原发布页对比,不一致则重新下载;3、改用系统自带文件管理器打开APK安装,避免第三方工具受限;4、清理ES文件浏览器缓存,进入设置→应用管理→存储→清除缓存;5、更新ES文件浏览器至最…

    2026年10月1日 • 用户投稿
    300
  • 菜鸟 学注册机编写之 Android app

    菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app

    0x00前言 环境及工具: 手机    Nexus 4(己root) 系统版本   Android 5.01 工具    AndroidKiller_V1.2     关于Android平台app注册机的编写网上文章还比较少,而在Windows平台上这方面的教程己经很多了,今天将以一个简单的app为…

    2026年10月1日 • 用户投稿
    200
  • iCloud官网怎么登录_iCloud官网登录步骤详细教程

    iCloud官网怎么登录_iCloud官网登录步骤详细教程iCloud官网怎么登录_iCloud官网登录步骤详细教程iCloud官网怎么登录_iCloud官网登录步骤详细教程iCloud官网怎么登录_iCloud官网登录步骤详细教程

    首先检查网络及账户信息是否正确,再根据设备选择相应登录方式:1、通过浏览器访问iCloud.com并输入Apple ID和密码,完成双重认证;2、Chrome或Edge用户可选通行密钥,用iPhone/iPad扫描二维码验证;3、Safari用户可使用面容ID或触控ID快速登录;4、若无法接收验证码…

    2026年10月1日 • 用户投稿
    200
  • 业内人士分析任天堂发布会遇冷原因 没惊更没喜

    业内人士分析任天堂发布会遇冷原因 没惊更没喜业内人士分析任天堂发布会遇冷原因 没惊更没喜业内人士分析任天堂发布会遇冷原因 没惊更没喜业内人士分析任天堂发布会遇冷原因 没惊更没喜

    ·以下观点出自日本游戏产业资深评论人河村鳴紘: 此次任天堂的发布会显然意在为年底购物季预热,但实际效果可能难以达成预期,主要存在三大问题: 1、Switch 2的市场渗透率仍然偏低,市面上高价转卖现象普遍。官方在发布内容上既要避免助长炒卖风气,又需顾及已购机用户的期待,这种平衡极难把握。 2、所公布…

    2026年10月1日 • 用户投稿
    000
  • 《夜下降生 II Sys:Celes》新DLC角色「泉」今天上市!

    《夜下降生 II Sys:Celes》新DLC角色「泉」今天上市!《夜下降生 II Sys:Celes》新DLC角色「泉」今天上市!《夜下降生 II Sys:Celes》新DLC角色「泉」今天上市!《夜下降生 II Sys:Celes》新DLC角色「泉」今天上市!

    亚克系统亚洲 (arc system works asia) 宣布《夜下降生》系列最新力作《夜下降生 ii sys:celes》的新dlc角色「泉」已于今日正式上线。 ■ 最终章「最后的钥匙」开启,角色「泉」今日登场! 备受期待的DLC角色「泉」已于8月19日正式推出。作为一名擅长远程压制与气流控制…

    2026年10月1日 • 用户投稿
    200
  • java如何解析XML格式的数据 javaXML处理的实用编程方法

    java如何解析XML格式的数据 javaXML处理的实用编程方法java如何解析XML格式的数据 javaXML处理的实用编程方法java如何解析XML格式的数据 javaXML处理的实用编程方法java如何解析XML格式的数据 javaXML处理的实用编程方法

    处理大型xml文件时,sax和stax更高效,因为它们采用流式处理,内存占用低;其中stax在保持低内存消耗的同时提供更好的控制力和灵活性,更适合复杂场景;sax适用于对性能要求极高且逻辑简单的顺序处理场景,因此对于gb级别的xml文件,推荐优先选择stax,其次sax。 Java解析XML数据,核…

    2026年10月1日 • 用户投稿
    200
  • 快速入门Flink (1) —— Flink的简介与架构体系

    快速入门Flink (1) —— Flink的简介与架构体系快速入门Flink (1) —— Flink的简介与架构体系快速入门Flink (1) —— Flink的简介与架构体系快速入门Flink (1) —— Flink的简介与架构体系

    历时一个多月,我们终于结束了【企业级360°全方位用户画像】的项目,想看具体详情的朋友,可以移步至博主的大数据项目专栏一饱眼福… 言归正传,在完成了两个大数据项目之后,接下来的几天,我们将要开始学习一项非常牛X的大数据组件——Flink。相信大数据圈的朋友肯定也早已知晓它的”威力&#82…

    2026年10月1日 • 用户投稿
    200
  • java如何用else扩展if的条件判断 java条件分支语句的简单用法

    java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法java如何用else扩展if的条件判断 java条件分支语句的简单用法

    else语句是if条件不成立时的备选执行路径,它确保在if或else if条件都不满足时执行默认代码块;1. else与if构成互斥逻辑,保证仅一个分支执行,而独立if语句可能触发多个条件;2. if-else if-else链用于处理多重互斥条件,需按从严格到宽松的顺序排列条件以避免逻辑错误;3.…

    2026年10月1日 • 用户投稿
    100
  • 谷歌浏览器如何同步书签和设置_谷歌浏览器数据同步功能配置指南

    谷歌浏览器如何同步书签和设置_谷歌浏览器数据同步功能配置指南谷歌浏览器如何同步书签和设置_谷歌浏览器数据同步功能配置指南谷歌浏览器如何同步书签和设置_谷歌浏览器数据同步功能配置指南谷歌浏览器如何同步书签和设置_谷歌浏览器数据同步功能配置指南

    首先检查并登录Google账号确保同步已开启,接着通过chrome://sync-internals/手动触发同步,最后可导出书签HTML文件进行本地传输与导入。 如果您在多台设备上使用谷歌浏览器,但发现书签和设置未能自动更新,可能是同步功能未正确配置或存在延迟。以下是解决此问题的步骤: 本文运行环…

    2026年10月1日 • 用户投稿
    100
  • win10谷歌浏览器怎么用谷歌搜索引擎

    win10谷歌浏览器怎么用谷歌搜索引擎win10谷歌浏览器怎么用谷歌搜索引擎win10谷歌浏览器怎么用谷歌搜索引擎win10谷歌浏览器怎么用谷歌搜索引擎

    谷歌浏览器因其便捷性和稳定性受到众多用户的青睐,许多用户都倾向于使用谷歌自带的搜索引擎功能。然而,部分win10系统的用户可能遇到无法正常使用谷歌搜索引擎的问题,那么接下来就为大家介绍如何在win10系统中让谷歌浏览器采用谷歌搜索引擎的方法,赶紧来看看吧! win10谷歌浏览器启用谷歌搜索引擎的操作…

    2026年10月1日 • 用户投稿
    300
  • 根据字母等级计算绩点并输出

    根据字母等级计算绩点并输出根据字母等级计算绩点并输出根据字母等级计算绩点并输出根据字母等级计算绩点并输出

    本文旨在指导读者如何编写一个Java程序,该程序接受用户输入的字母等级,并根据等级返回相应的绩点。程序包含异常处理机制,能够有效处理无效的字母等级输入,并输出相应的错误提示信息,确保程序的健壮性和用户体验。 程序实现 以下是一个Java程序的示例,它实现了根据用户输入的字母等级计算并输出绩点的功能。…

    2026年10月1日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信