为了账号安全,请及时绑定邮箱和手机立即绑定

Golang接口不需要导入?

Golang接口不需要导入?

Go
守着星空守着你 2021-06-19 18:08:21
如果你看一下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/
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

os不导入包,io因为io.Reader接口没有在包中使用os

该类型*File碰巧实现了,io.Reader因为它有一个Read具有正确签名的方法。这个实现关系是隐式的,既不需要也不可能使这个显式(例如在 Java 中使用implements ISomeThing)。

你问:“这是否意味着接口根本不需要导入就可以使用?” 正式的答案是:当然不是!如果你想使用io.Reader你必须import "io"

但是实现/满足一个接口并不是对这个接口的使用:任何类型都可以通过拥有正确的方法来实现任何接口(即使是未来尚未发明的接口)。


查看完整回答
反对 回复 2021-06-21
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

导出的实体是常量、变量和类型。使用它们,即。要引用这样的导出实体,必须使用它们的 [qualified] 名称,而限定符是导出它们的包的基本名称。这也意味着使用此类包的导入语句。IOW,在文件范围内绑定导出的实体是 [严格]显式的。没有导入 == 无法访问导出的东西。

OTOH,实现接口被指定隐式

一个类型实现了包含其方法的任何子集的任何接口,因此可以实现几个不同的接口。例如,所有类型都实现空接口:

interface{}


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信