分享
golang学习的点点滴滴:接口复制和接口查询
亓斌哥哥 · · 7287 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
package main
import "fmt"
type IFile interface {
Read()
Write()
}
type IReader interface {
Read()
}
type File struct {
}
func (f *File) Read() {
}
func (f *File) Write() {
}
func main() {
f := new(File)
var f1 IFile = f // ok 因为FIle实现了IFile中的所有方法
var f2 IReader = f1 // ok 因为IFile中包含IReader中所有方法
// var f3 IFile = f2 // error 因为IReader并不能满足IFile(少一个方法)
//
var f3 IReader = new(File) // ok 因为File实现了IReader中所有方法
// var f4 IFile = f3 // error 因为IReader并不能满足IFile 同上..如何解决呢? 要用接口查询
// 接口查询
// 这个if语句检查file1接口指向的对象实例是否实现了IFile接口
// 如果实现了
// 则执行特定的代码。
// 注意:这里强调的是对象实例,也就是new(File)
// File包含IFile里所有的方法
// 所以ok = true
if f5, ok := f3.(IFile); ok {
fmt.Println(f5)
}
// 询问接口它指向的对象是否是某个类型
// 这个if语句判断file1接口指向的对象实例是否是*File类型
// 依然ok
if f6, ok := f3.(*File); ok {
fmt.Println(f6)
}
fmt.Println(f1, f2, f3)
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信7287 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
package main
import "fmt"
type IFile interface {
Read()
Write()
}
type IReader interface {
Read()
}
type File struct {
}
func (f *File) Read() {
}
func (f *File) Write() {
}
func main() {
f := new(File)
var f1 IFile = f // ok 因为FIle实现了IFile中的所有方法
var f2 IReader = f1 // ok 因为IFile中包含IReader中所有方法
// var f3 IFile = f2 // error 因为IReader并不能满足IFile(少一个方法)
//
var f3 IReader = new(File) // ok 因为File实现了IReader中所有方法
// var f4 IFile = f3 // error 因为IReader并不能满足IFile 同上..如何解决呢? 要用接口查询
// 接口查询
// 这个if语句检查file1接口指向的对象实例是否实现了IFile接口
// 如果实现了
// 则执行特定的代码。
// 注意:这里强调的是对象实例,也就是new(File)
// File包含IFile里所有的方法
// 所以ok = true
if f5, ok := f3.(IFile); ok {
fmt.Println(f5)
}
// 询问接口它指向的对象是否是某个类型
// 这个if语句判断file1接口指向的对象实例是否是*File类型
// 依然ok
if f6, ok := f3.(*File); ok {
fmt.Println(f6)
}
fmt.Println(f1, f2, f3)
}