让我们一起Go(十二)

前言:

上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程。

 

一、Go语言中的接口

首先来看一个最基本的接口:

 

和定义一个结构体类似,只不过将struct换成了interface,然后声明了两个函数:draw()和count()。就这么简单,一个接口就定义好了,那么如何实现接口呢?在java中我们会让一个类去实现接口,在实现的时候必须用implements关键字显示声明去实现,如:

class myshow implements show{...}

在Go语言中,不需要这么做,我们要做的只是去实现接口声明的所有函数就可以了,如下所示,就实现show这个接口:

上面代码,我们的osArgs结构体实现了文章开头给出的show这个接口。其实就是用到上一篇的内容,给osArgs结构体定义了两个方法,而这两个方法就是接口定义的两个函数,只是我们具体完成了这两个函数具体要做的功能。这不就是接口的功能么,你可以定义很多个结构体,分别实现show接口,使得它实现不同的功能。但是Go语言的接口实现不需要显示去声明实现了某个接口如上面的show,因为很有可能在另外一个地方,有一个show2的接口,它也是定义了draw()和count()函数。所以,你其实也是实现了show2这个接口,这似乎非常灵活,自由。这里不会讲它如何如何好,或者如何如何不好,哈哈哈,因为......反正对于初学者来说,目前只需要懂得如何用就好了,等深入后再去探讨“好坏”的问题会更好。最后,看如何具体使用上面的接口:

要想这个例子正常编译运行,记得导入os包哦。

二、Go语言中的接口的继承

如Go语言没有继承,而使用组合的方式来实现类似功能,其实接口也是,不像java或其它语言一个继承接口,而是组合一个接口,我们简单的改写前面的代码:

我们将之前的接口show改成首字母大写,还记得吧,这样就可以被外部包调用,而且把之前show接口的draw函数分离出一个Drawer接口,在Draw后加上er是因为在Go语言中习惯上,单一成员的接口的名称是其成员名加-er。然后在Show接口中组合Drawer接口,如上代码所示。

三、本篇小结

本篇接口就写到这里,在下一篇中将看到更多关于Go接口的相关内容。

posted @   Sirk  阅读(1014)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

 

点击右上角即可分享
微信分享提示