Go接口2

来源:互联网 发布:pb网络用语 编辑:程序博客网 时间:2024/06/04 19:35
type File struct {// ...}func (f *File) Read(buf []byte) (n int, err error)func (f *File) Write(buf []byte) (n int, err error)func (f *File) Seek(off int64, whence int) (pos int64, err error)func (f *File) Close() errortype IFile interface {Read(buf []byte) (n int, err error)Write(buf []byte) (n int, err error)Seek(off int64, whence int) (pos int64, err error)Close() error}type IReader interface {Read(buf []byte) (n int, err error)}type IWriter interface {Write(buf []byte) (n int, err error)}type ICloser interface {Close() error}//尽管这里File没有显示地继承接口,甚至不知道这些接口的存在//但是,只要File实现了该接口的函数,即可访问和赋值var file1 IFile = new(File)var file2 IReader = new(File)var file3 IWriter = new(File)var file4 ICloser = new(File)


接口赋值

接口赋值在Go语言中分为如下两种情况:
 将对象实例赋值给接口;
 将一个接口赋值给另一个接口。


首先看第一个方法

interface Integer intfunc (a Integer) Less (b Integer) bool{return a < b}func (a *Integer ) Add (b Integer) {*a+=b}type LessAdder interface{Less(b Integer) boolAdd(b Integer)}var a Integer=1//yesvar b LessAdder = &a//novar b LessAdder = a

原因在于 go语言可以根据

func (a Integer) Less (b Integer) bool{return a < b}

自动生成

func (a *Integer) Less (b Integer) bool{return *a < b}
反之则不然

第二种方法


package onetype ReadWriter interface{Read(buf [] byte)(n int, err error)Write(buf [] byte)(n int, err error)}package twotype IStream interface{Read(buf [] byte)(n int, err error)Write(buf [] byte)(n int, err error)}var file1 one.ReadWriter = new(File)var file2 two.IStream = file1var file3 one.ReadWriter =file2//因为IWriter的方法列表是ReadWrtier方法列表的子集,所以可以将ReadWriter赋值给IWritervar file4 IWriter = file3
 

接口查询



爱上地方

0 0
原创粉丝点击