Go接口2

luan_tianjiao · · 1138 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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() error

type 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 int

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

func (a *Integer ) Add (b Integer) {
*a+=b
}

type LessAdder interface{
Less(b Integer) bool
Add(b Integer)
}

var a Integer=1
//yes
var b LessAdder = &a
//no
var 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 one
type ReadWriter interface{
Read(buf [] byte)(n int, err error)
Write(buf [] byte)(n int, err error)
}

package two
type 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 = file1
var file3 one.ReadWriter =file2

//因为IWriter的方法列表是ReadWrtier方法列表的子集,所以可以将ReadWriter赋值给IWriter
var file4 IWriter = file3
 

接口查询



爱上地方


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:luan_tianjiao

查看原文:Go接口2

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1138 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传