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)

    }

     

  • 相关阅读:
    AVFoundation 文本语音播报
    单元测试 + UI测试
    scrollView
    设备旋转---横竖屏切换
    SDK 开发 .a .framework .bundle (xcode引用) 依赖sdk工程
    多线程 NSThread 的使用
    多线程 NSOpeartion 的使用
    多线程 GCD 的使用
    swift pod 第三方库异常的处理
    按钮重复点击问题 UIbutton
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/10005621.html
Copyright © 2011-2022 走看看