zoukankan      html  css  js  c++  java
  • go语言之接口二

    接口查询:

    先来看如下的结构。结构体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)

    }

     

  • 相关阅读:
    MySQL技术内幕(第5版)
    Creo Parametric 4.0基础、进阶、高手一本通
    PostgreSQL 9.0性能调校
    Python程序设计案例课堂
    Creo2.0完全学习手册
    Excel会计电算化与应用(第3版)
    JPEG与RAW的较量 数码影像拍摄与后期全流程详解
    [Objective-c 基础
    [Objective-c 基础
    iOS开发网络篇—GET请求和POST请求(转)
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/10005621.html
Copyright © 2011-2022 走看看