Golang接口不需要导入?

如果你看一下File结构体,它的Read()andWrite()函数与io.Writerandio.Reader接口Read()Write()函数完全相同。但是在包io中找不到File包(未导入)。这是否意味着根本不必导入接口即可使用?只要Read()定义与接口相同,就可以暗示它是io.Writerorio.Reader接口的一部分?

io:http : //golang.org/pkg/io/

操作系统:http : //golang.org/pkg/os/


守着星空守着你
浏览 229回答 2
2回答

一只斗牛犬

包os不导入包,io因为io.Reader接口没有在包中使用os。该类型*File碰巧实现了,io.Reader因为它有一个Read具有正确签名的方法。这个实现关系是隐式的,既不需要也不可能使这个显式(例如在 Java 中使用implements ISomeThing)。你问:“这是否意味着接口根本不需要导入就可以使用?” 正式的答案是:当然不是!如果你想使用io.Reader你必须import "io"。但是实现/满足一个接口并不是对这个接口的使用:任何类型都可以通过拥有正确的方法来实现任何接口(即使是未来尚未发明的接口)。

幕布斯7119047

导出的实体是常量、变量和类型。使用它们,即。要引用这样的导出实体,必须使用它们的 [qualified] 名称,而限定符是导出它们的包的基本名称。这也意味着使用此类包的导入语句。IOW,在文件范围内绑定导出的实体是 [严格]显式的。没有导入 == 无法访问导出的东西。OTOH,实现接口被指定为隐式:一个类型实现了包含其方法的任何子集的任何接口,因此可以实现几个不同的接口。例如,所有类型都实现空接口:interface{}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go