接口查询:

先来看如下的结构。结构体File实现了Read,Writer,Seek,Close的方法

type File struct{

}

func (f *File) Read(buf []byte)(n int,err error){

return n,err

}

func (f *File) Write(buf []byte)(n int,err error){

fmt.Println("writer function")

return n,err

}

func (f *File) Seek(buf []byte)(n int,err error){

return n,err

}

func (f *File) Close(buf []byte)(n int,err error){

return n,err

}

在IStream的结构中定义了Write,Read方法。

type IStream interface{

Write(buf []byte)(n int,err error)

Read(buf []byte)(n int,err error)

}

来看下面的这种赋值。将File实例赋值给file1, 然后将file1赋值给file2

var file1 IStream=new(File)

var file2 Writer=file1

通过下面的语句就可以分别判断file1接口指向的对象是否实现了File以及file2接口指向的对象是否实现了IStream接口. 如果实现了,则执行特定的代码。

if file5,ok:=file1.(*File);ok{

fmt.Println(ok)

fmt.Println(file5)

}

if file7,ok:=file2.(IStream);ok{

fmt.Println(ok)

fmt.Println(file7)

}

类型查询:

在Go语言中,还可以更加直截了当询问接口指向的对象实例的类型。例如下面:

下面的分别判断file1以及v1的类型。根据不同的类型走不同的分支判断。

switch v:=file1.(type){

case IStream:

fmt.Println(v)

}

var v1 interface{}=value

fmt.Println(v1)

switch v:=v1.(type){

case int:

fmt.Println(v)

}

接口组合:

type IReader interface{

Read(buf []byte)(n int,err error)

}

type IWriter interface{

Write(buf []byte)(n int,err error)

}

ReadWriter接口将基本的Read和Write方法组合起来

type ReadWriter interface{

IReader

IWriter

}

下面的这个写法也是一样的效果。这两种写法的表意完全相同:ReadWriter接口既能做Reader接口的所有事情,又能做Writer接口的所有事情

type ReadWriter interface{

Read(buf []byte)(n int,err error)

Write(buf []byte)(n int,err error)

}

go语言之接口二的更多相关文章

  1. Go 语言入门(二)方法和接口

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...

  2. Go语言基础(二)

    Go语言基础(二) 跟着上篇,继续看Go基础 一.变量作用域 与C类似,有全局变量.局部变量.形参之分 package main import "fmt" // 全局变量 var ...

  3. C语言第十二讲,文件操作.

    C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...

  4. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  5. C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...

  6. Java语言基础(二) Java关键字

    Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...

  7. Java语言基础(二)

    Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...

  8. R语言数据接口

    R语言数据接口 R语言处理的数据一般从外部导入,因此需要数据接口来读取各种格式化的数据 CSV # 获得data是一个数据帧 data = read.csv("input.csv" ...

  9. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

随机推荐

  1. Elasticsearch教程(三),IK分词器安装 (极速版)

    如果只想快速安装IK,本教程管用.下面看经过. 简介: 下面讲有我已经打包并且编辑过的zip包,你可以在下面下载即可. 当前讲解的IK分词器 包的 version 为1.8. 一.下载zip包. 下面 ...

  2. 开源jabber(XMPP)架设内部即时通讯服务的解决方案

    Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用.    XMPP(可扩展消息处理现场协议)是基于可扩展 ...

  3. Linux Ubuntu下Dropbox图标消失

    Linux下的Dropbox是支持命令行模式的.,在terminal中输入dropbox后,如下提示: Dropbox command-line interface commands: Note: u ...

  4. C++ 设置控制台输出颜色

    #include <stdint.h> #include <iostream> #include <string> #include <Windows.h&g ...

  5. Android学习(十一) File文件操作

    File类 1.获取当前应用程序的目录: this.getFilesDir();                                             //获取当前应用程序的数据目录 ...

  6. C++Singleton的DCLP(双重锁)实现以及性能测评

      本文系原创,转载请注明:http://www.cnblogs.com/inevermore/p/4014577.html   根据维基百科,对单例模式的描述是: 确保一个类只有一个实例,并提供对该 ...

  7. close_wait状态的产生原因及解决(转)

    最近测试环境server由于需要与大量的后台server交互,今天突然发现有大量的close_wait产生,于是仔细研究了一下: 如果我们的服务器程序处于CLOSE_WAIT状态的话,说明套接字是被动 ...

  8. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  9. 在PreferenceAcitity中使用Fragement时避免额外的Left和RightPadding

    On Android 4.4 遇到过这种问题: 注意到.上面的ActionBar部分的左右各有48像素的padding. 要了解该问题的成因,要首先了解其结构: 该页面的Activity是一个Pref ...

  10. 解决cp: omitting directory 提示信息

    解决cp: omitting directory 提示信息 执行cp时出现“cp: omitting directory ” 提示信息, 可以使用cp -r 参数来递归拷贝这些文件.