让我们一起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接口的相关内容。
让我们一起Go(十二)的更多相关文章
- 前端开发中SEO的十二条总结
一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 我的MYSQL学习心得(十二) 触发器
我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- 第十二章Fundamental Data Types 基本数据类型
目录: 12.1 数值概论 12.2整数 12.3浮点数 12.4 字符和字符串 12.5布尔变量 12.6枚举类型 12.7具名常量 12.8数组 12.9创建你自己的类型 12.1 数值概论 ...
- [分享] IT天空的二十二条军规
Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Bootstrap <基础二十二>超大屏幕(Jumbotron)
Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- AngularJs的UI组件ui-Bootstrap分享(十二)——Rating
Rating是一个用于打分或排名的控件.看一个最简单的例子: <!DOCTYPE html> <html ng-app="ui.bootstrap.demo" x ...
随机推荐
- weblogic jetty debug 远程
- iOS----友盟分享完善版本
分享 详细集成 注意:1.线上集成文档的示例代码对应的是最新版本的SDK,如果你所用的SDK版本类名或者方法名与此文档不符合,请看随包里面的线下文档或者下载使用最新版本的SDK. 设置友盟appkey ...
- Java 线程 — synchronized、volatile、锁
线程同步基础 synchronized 和volatile是Java线程同步的基础. synchronized 将临界区的内容上锁,同一时刻只有一个进程能访问该临界区代码 使用的是内置锁,锁一个时刻只 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- Mac OS X 系统12个常用的文本编辑快捷键(移动、选中)
经常和文字处理打交道?如果多多使用下面这 12 个快捷键,在移动.选择.复制等操作文字时效率会大大提升. 6 个移动光标的快捷键第一组快捷键可以用来在文本中快速移动光标: 跳到本行开头 – Comma ...
- GO語言基礎教程:Hello world!
首先簡單地說一下GO語言的環境安裝,從 http://golang.org/dl/ 針對自己的操作系統選擇合適的安裝包,然後下載安裝即可,下載的時候注意別選錯了的操作系統,例如go1.3.1.darw ...
- 【VerySky原创】RPR_ABAP_SOURCE_SCAN
[VerySky原创]RPR_ABAP_SOURCE_SCAN 扫描 ABAP 报表源
- ASP.NET Web API中的参数绑定总结
ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...
- 内存缓存LruCache实现原理
自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...
- 解决ASP.NET在IE10中Session丢失问题【转】
今天发现在IE10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,IE10送出的HTTP头,和.AUTH Cookie都没问题,但使用表单验证机制(FormsAuth ...