golang学习的点点滴滴:接口复制和接口查询

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

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)
}



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

本文来自:开源中国博客

感谢作者:亓斌哥哥

查看原文:golang学习的点点滴滴:接口复制和接口查询

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

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