Go语言中接口组合的实现方法

本文实例讲述了Go语言中接口组合的实现方法。分享给大家供大家参考。具体实现方法如下:

在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B、C),这种方式等价于在接口A中添加接口B、C中声明的方法。

代码如下:

//接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法 
type Reader interface { 
    read() 

type Writer interface { 
    write() 

 
//定义上述两个接口的实现类 
type MyReadWrite struct{} 
 
func (mrw *MyReadWrite) read() { 
    fmt.Println("MyReadWrite...read") 

 
func (mrw *MyReadWrite) write() { 
    fmt.Println("MyReadWrite...write") 

 
//定义一个接口,组合了上述两个接口 
type ReadWriter interface { 
    Reader 
    Writer 

 
//上述接口等价于: 
type ReadWriterV2 interface { 
    read() 
    write() 

 
//ReadWriter和ReadWriterV2两个接口是等效的,因此可以相互赋值 
func interfaceTest0104() { 
    mrw := &MyReadWrite{} 
    //mrw对象实现了read()方法和write()方法,因此可以赋值给ReadWriter和ReadWriterV2 
    var rw1 ReadWriter = mrw 
    rw1.read() 
    rw1.write() 
 
    fmt.Println("------") 
    var rw2 ReadWriterV2 = mrw 
    rw2.read() 
    rw2.write() 
 
    //同时,ReadWriter和ReadWriterV2两个接口对象可以相互赋值 
    rw1 = rw2 
    rw2 = rw1 
}

希望本文所述对大家的Go语言程序设计有所帮助。

(0)

相关推荐

  • Go语言中io.Reader和io.Writer的详解与实现

    一.前言 也许对这两个接口和相关的一些接口很熟悉了,但是你脑海里确很难形成一个对io接口的继承关系整天的概貌,原因在于godoc缺省并没有像javadoc一样显示官方库继承关系,这导致了我们对io接口的继承关系记忆不深,在使用的时候还经常需要翻文档加深记忆. 本文试图梳理清楚Go io接口的继承关系,提供一个io接口的全貌. 二.io接口回顾 首先我们回顾一下几个常用的io接口.标准库的实现是将功能细分,每个最小粒度的功能定义成一个接口,然后接口可以组成成更多功能的接口. 最小粒度的接口 typ

  • Go语言接口用法实例

    本文实例讲述了Go语言接口用法.分享给大家供大家参考.具体分析如下: 接口类型是由一组方法定义的集合. 接口类型的值可以存放实现这些方法的任何值. 复制代码 代码如下: package main import (     "fmt"     "math" ) type Abser interface {     Abs() float64 } func main() {     var a Abser     f := MyFloat(-math.Sqrt2)   

  • Google Voice 短信发送接口PHP开源版(2010.5更新)

    1,支持群发 2,中文转成拼音发送 如果需要群发多帐号用英文逗号(,)分隔(86159..,86159..),消息内容不支持中文,当您输入中文的时候系统会自动转换为拼音(为了区分是拼音,拼音首字母大写),保证消息能正常发送(输入"我是旋风"短信内容为"Wo Shi Xuan Feng"). 复制代码 代码如下: <?php /* 提示:如果需要群发多帐号用英文逗号(,)分隔(86159..,86159..),消息内容不支持中文, 当您输入中文的时候系统会自动转

  • Go语言服务器开发实现最简单HTTP的GET与POST接口

    本文实例讲述了Go语言服务器开发实现最简单HTTP的GET与POST接口.分享给大家供大家参考.具体分析如下: Go语言提供了http包,可以很轻松的开发http接口.以下为示例代码: 复制代码 代码如下: package webserver    import (      "encoding/json"      "fmt"      "net/http"      "time"  )    func WebServerB

  • php调用google接口生成二维码示例

    复制代码 代码如下: <?php $data = isset($_GET['t']) ? $_GET['t'] : 'http://www.XXX.com'; $size = isset($_GET['size']) ? $_GET['size'] : '150x150'; $logo = isset($_GET['logo']) ? $_GET['logo'] :"./image/logo.jpg"; $chl = urlencode($logo); $png = "

  • GO语io包的常用接口

    本文实例分析了GO语io包的常用接口.分享给大家供大家参考.具体分析如下: 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在 Golang 中非常迷糊,特别是文件的读写操作,因为 Go 的文件读写操作有很多的方法,让我不知道怎么选择.直到我学习了 interface 的概念,然后由看了 package io 后才慢慢理解,也渐渐的喜欢上了 Golang 的灵活性.以我的经验来说,接口是一个很重要的知识点,是一系

  • Golang极简入门教程(二):方法和接口

    方法 在 Golang 中没有类,不过我们可以为结构体定义方法.我们看一个例子: 复制代码 代码如下: package main   import (     "fmt"     "math" )   type Vertex struct {     X, Y float64 }   // 结构体 Vertex 的方法 // 这里的方法接收者(method receiver)v 的类型为 *Vertex func (v *Vertex) Abs() float64

  • Google PR查询接口checksum新算法第1/2页

    取而代之的是一大段"In your email, please send us the entire code displayed below"之类的Google terms_of_service错误提示信息.看来是原先的接口已经失效了. 但我装在Firefox工具栏的扩展插件SearchStatus仍然能够正常解析出每个受访页的PR值,找到 SearchStatus 的插件包解开来看源码,果然是使用了不一样的验证码生成算法,在原先的 checksum 生成之后,还需要再进行一次计算,

  • 利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解

    首先引入JavaScript API文件 <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script> 此API提供的接口共有6个,geoip_country_code(){国家代码},geoip_country_ name(){国家名称},geoip_city() {城市名称},geoip_region(){地区代码},geoip_latit

  • Go语言中接口组合的实现方法

    本文实例讲述了Go语言中接口组合的实现方法.分享给大家供大家参考.具体实现方法如下: 在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B.C),这种方式等价于在接口A中添加接口B.C中声明的方法. 复制代码 代码如下: //接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法  type Reader interface {      read()  }  type Writer interface {      write()  }    //定义上述两个接口的实现类 

  • 一文带你了解Go语言中接口的使用

    目录 接口 接口的实现 接口类型变量 空接口 类型断言 类型断言变种 type switch 小结 接口 在 Go 语言中,接口是一种抽象的类型,是一组方法的集合.接口存在的目的是定义规范,而规范的细节由其他对象去实现.我们来看一个例子: import "fmt" type Person struct { Name string } func main() { person := Person{Name: "cmy"} fmt.Println(person) //

  • Go语言中调用外部命令的方法总结

    目录 引子 运行命令 显示输出 显示到标准输出 输出到文件 发送到网络 保存到内存对象中 输出到多个目的地 运行命令,获取输出 分别获取标准输出和标准错误 标准输入 环境变量 检查命令是否存在 封装 总结 引子 在工作中,我时不时地会需要在Go中调用外部命令.前段时间我做了一个工具,在钉钉群中添加了一个机器人,@这个机器人可以让它执行一些写好的脚本程序完成指定的任务.机器人倒是不难,照着钉钉开发者文档添加好机器人,然后@这个机器人就会向一个你指定的服务器发送一个POST请求,请求中会附带文本消息

  • C语言中可变参数的使用方法示例

    前言 在C语言程序编写中我们使用最多的函数一定包括printf以及很多类似的变形体.这个函数包含在C库函数中,定义为 int printf( const char* format, ...); 除了一个格式化字符串之外还可以输入多个可变参量,如: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 格式化字符串的判断本章暂且不论,下面分析一

  • 在易语言中使用类型库的方法

    如何在易语言中使用类型库 如何在易语言中使用类型库,我们下面用一个小例程来说明,首先打开"易语言" 选择"工具"→"类型库及OCX组件-〉支持库"注册word类型库. 然后左边支持库表中会出现word的类型库 然后我们在窗体中画上两个按钮以便我们使用,至于旁边画的那个com控件我们等一下 现在我们开始写入代码,如果按照com对象的方法来操作word,我们就要先创建一个word的对象,连接"Word.Application",其

  • Go语言中定时任务库Cron使用方法介绍

    目录 快速入门 Cron表达式格式 预定义时间表 设置时区 常用的方法介绍 快速入门 安装cron,注意这里安装的是v3版本.新版本和旧版时间使用有所区别 go get github.com/robfig/cron/v3@v3.0.0 在项目中导入 import "github.com/robfig/cron/v3" v3版本的github.com/robfig/cron/v3默认解析器符合Cron 维基百科页面所描述的标准用法大致如下 package main import ( &q

  • C语言中函数返回字符串的方法汇总

    在讨论着四种方法之前,首先要对函数有一个简单的认识,无论是在形实结合时,还是在return语句返回时,都有一个拷贝的过程.你传进来的参数是个值,自然函数在工作之前要把这个值拷贝一份供自己使用,你传进来的是个地址,函数也就会拷贝该地址供自己使用.同样return返回时,如果返回一个值,函数会将该值拷贝一份以提供给主调函数使用,返回的是一个指针(也就是地址),自然拷贝的就是一个地址,供主调函数使用. 先给出一个错误的例子: #include <stdio.h> #include <strin

  • go语言中排序sort的使用方法示例

    前言 sort包中实现了3种基本的排序算法:插入排序.快排和堆排序.和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用.所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法.比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序.sort包会根据实际数据自动选择高效的排序算法. 已知一个的struct组成的数组,现在要按照数组中的一个字段排序.pyt

  • C语言中的各种文件读写方法小结

    前言     找工作的时候,曾经用C语言练习过一段时间的算法题目,也在几个还算出名的OJ平台有过还算靠谱的排名.之前以为C语言只限于练习一下算法,但是工作中的一个问题解决让我意识到C语言的用处还是非常广泛的.下面介绍一下,如果用C语言来操作文件保存一个字符串,和读取一个字符串.算法中往往都是printf来打印出结果,但是真实工作中往往通过文件来进行一些持久化的存储工作. C-File I/O     文件的I/O操作是每一门语言的重点,因此这里我先来介绍一下如何用C语言去进行文件的I/O操作.

  • 易语言中系统音量的使用方法

    大家在学习易语言中,可能会制作一些播放器之类的软件时,一般会有系统音量的设置,调节系统音量的大小.今天我就教大家如何实现这个功能,希望能对大家有所帮助. 1.首先打开易语言,创建windows窗口程序. 2.在扩展组件中找到系统音量,拖动并创建. 3.依据个人需求设计页面,如下图所示. 1.调试工作 双击启动窗口,输入下图源码.其中的设备标识在音量类型中依据个人需求选择. 2.为了了解一些数值,我们写下下图的源码进行调试. 3.按下F5进行调试,然后查看结果. 1.核心工作 我们发现65535这

随机推荐