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)

}

 

posted @   red_leaf_412  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示