Go中实现接口的条件

package main

import "fmt"

//1。接口的方法与实现接口的类型方法格式一致
//2。接口中所有方法均被实现,若只有接口中的方法而没有实现实现该方法就会报错
//当一个接口中有多个方法时,只有这些方法都被实现了,接口才能被正确编译并使用。




/*
(1)方法名不一致的话:
会报出:
cannot use f (type *file) as type DataWriter in assignment:
*file does not implement DataWriter (missing WriteData method)
没找到这个接口中的方法
(2)实现接口方法签名不一致:
data interface{}
data  int
会报出:
cannot use f (type *file) as type Datawriter in assignment:
*file does not implement Datawriter (wrong type for WriteData method)
have WriteData(int) error
want WriteData(interface {}) error

*/


//数据写入器的抽象展示



//定义一个数据写入器(接口)
type   Datawriter interface {
	//输入一个interface{}类型的data,返回error表示可能发生的错误
	WriteData(data interface{})  error
	//能否写入
	CanWrite(data interface{})   error
}
//定义文件结构,用于实现DataWriter
type file struct {

}
//实现定义好的DataWrite接口的WriteData()的方法
//file的WriteData()方法使用指针接收器,输入一个接口类型的数据data,返回error
func (*file) WriteData(data  interface{}) error {
	//模拟写入数据
	fmt.Println("WriteData:",data)
	//error
	return nil
}
func (*file) CanWrite(data interface{}) error{
	fmt.Println("CanWrite:",data)
	return nil
}

//像python中通过实例化对象,去调用这个对象中的方法

func main()  {
	//实例化file赋值给f,f的类型为*file
	f:=new(file)
	//声明一个DataWriter类型的write接口变量
	var writer Datawriter
	//将*file类型的f赋值给writer接口变量,虽然变量类型不同,但writer是一个接口,且f已经实现了DataWriter()的所有方法(即writedata()方法)
	writer = f
	//DataWriter接口类型的writer使用WritData()方法写入一个字符串
	writer.WriteData("data")
	writer.CanWrite("no")
}

//WriteData: data
//CanWrite: no
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值