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
Go中实现接口的条件
最新推荐文章于 2024-04-25 20:53:46 发布