接口查询:

先来看如下的结构。结构体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教程(九) elasticsearch 查询数据 | 分页查询

    Elasticsearch  的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大.下面上代码: 一个简单的查询,返回一个List<对象> ..    ...

  2. Android学习(九) SharedPreferences

    一.SharedPreferences:一种清醒的存储方式,基于XML存储key-value键值对方式的数据. SharedPreferences对象本身只能获取数据,而不能存储和修改数据,存储修改只 ...

  3. POJ2536 Gopher II【二分图最大匹配】

    题目链接: http://poj.org/problem? id=2536 题目大意: 有N仅仅鼹鼠和M个洞穴,假设鼹鼠在S秒内不可以跑到洞穴,就会被老鹰捉住吃掉. 鼹鼠跑的速度为V米/秒. 已知一个 ...

  4. PLSQL Developer设置及快捷键设置

    1.登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都需 ...

  5. Cent OS安装My Sql

    因为公司的需要,所以就自己学习了一下在Linux上安装MySQL,但是翻查了好多博客,没有特别清楚,自己写下来好好总结一下 一.系统环境 CentOS-6.3-i386-bin-DVD1 二.下载My ...

  6. asp.net core mvc视频A:笔记2-3.高级数据绑定

    默认的绑定顺序,如果需要取指定数据源里的数据,需要通过属性控制,比如[FromQuery] 前端 控制器方法 前端 此时并不能得到head中的数据 改造控制器方法,添加[FromHeader]属性 再 ...

  7. Android分享功能的一点总结

    前段时间给曾经的App加了分享功能,与大家分享一些心得. 实现分享功能有三种方式: 1.调用Android自带的分享接口.这样的方式最简单.它是直接调用App的发信息功能,把我们的链接通过信息方式发出 ...

  8. windows利用jconsole远程监控linux的tomcat

    1.配置tomcat ①  编辑tomcat的catelina.sh文件,进入tomcat安装目录,使用命令:sudo vim bin/catalina.sh,如果是普通用户启动的,则修改damen. ...

  9. Newtonsoft.Json之JArray, JObject, JProperty,JValue

    JObject staff = new JObject(); staff.Add(new JProperty("Name", "Jack")); staff.A ...

  10. Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage  mvc mvp的 java c#.net php js

    Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage  mvc mvp的 java c#.net php js 原理 通过vm带入启 ...